Intereting Posts
JNI ERROR (ошибка приложения): переполнение локальной таблицы ссылок (max = 512) Метка EditText? Не удается вызвать void android.view.View.setElevation (float) на нулевом объекте в лапизме / SearchView «Поток не представляет собой хранилище ключей PKCS12» после сохранения с нового пароля на устройстве Android Как вращать актер изображения в libgdx по средней точке? Как неявные объединенные столбцы работают с данными контактов Android? Правила именования для Android-ресурсов Панель инструментов и TabLayout не видны на устройствах Android 4.4 Правильно сортировать узлы от самых новых до самых старых Платеж Google In-App, IllegalArgumentException: намерение службы должно быть явным, после перехода на Android L Dev Preview Android – обновить контакт Пример AlwaysOnHotwordDetector в Android Эмулятор зависает при загрузке анимации Ожидается запуск HOME ('android.process.acore') Android Studio создает шаблон проекта для новых проектов Отправить вывод Logcat приложения в адрес электронной почты

В Android-браузере Android, когда я запускаю javascript, sotfkeyboard исчезает

В WebView при выполнении JavaScript через webview.loadUrl () программная клавиатура исчезает, если она видна. Когда я пытаюсь набрать текст в текстовом поле html, экранная панель исчезает (если выполняется JavaScript), и я не могу напечатать весь текст.

Текстовое поле не теряет фокус, поэтому приглашение по-прежнему находится в текстовом поле, но экранная клавиатура опускается.

Может кто-нибудь сказать мне, как это исправить?

Solutions Collecting From Web of "В Android-браузере Android, когда я запускаю javascript, sotfkeyboard исчезает"

Самый простой способ сделать это – сохранить вызовы javascript в плагине или JavascriptInterface и повторить метод на стороне javascript, выполняющей его. Таким образом loadUrl никогда не вызывается.

Что-то вроде:

 StringBuilder sb = null; private final Object LOCK = new Object(); public void sendJavascript(String js){ synchronized(LOCK) { if (sb == null){ sb = new StringBuilder(); sb.append("javascript:"); } sb.append(js): } } 

Затем, используя javascriptInterface:

 private class JsInterface { @JavascriptInterface public String getJavascript(){ synchronized(LOCK) { String javascriptToRun = sb.toString(); sb = new StringBuilder(); sb.append("javascript:"); return javascriptToRun; } } } 

Добавьте свой javascript-интерфейс в свой веб-просмотр:

 JsInterface jsInterface = new JavascriptInterface(); webview.addJavascriptInterface(jsInterface, "JsInterface"); 

И на вашем javascript-коде установлен временной интервал для извлечения сохраненной функции.

РЕДАКТИРОВАТЬ

Я только нашел этот ответ , он показывает, что у меня большая проблема, методы не синхронизированы. Значение, когда вы вызываете getJavascript() наша переменная sb может быть не готова к чтению. Я добавил соответствующий бит в источник выше.

ИСПОЛЬЗУЙТЕ ЗАКАЗЫ, или ваш код будет ненадежным

Это ожидаемое поведение: вызывая WebView.loadUrl() вы в основном перезагружаете страницу, поэтому мягкая клавиатура отклоняется.

В качестве альтернативы вы можете попытаться определить, отображается ли мягкая клавиатура и отсрочить выполнение JS до ее скрытия. Общий метод проверки состояния мягкой клавиатуры см. В разделе Как проверить видимость программной клавиатуры в Android?