En la vista web de Android cuando ejecuto javascript desaparece el sotfkeyboard

En WebView cuando ejecuto un JavaScript a través de webview.loadUrl (), el teclado desaparece si es visible. Cuando intento escribir algo de texto en el campo de texto html, desaparece el teclado (si se ejecuta JavaScript) y no puedo escribir todo el texto.

El campo de texto no pierde el foco, por lo que el mensaje sigue en el campo de texto, pero el teclado virtual se va hacia abajo.

¿Puede alguien decirme cómo solucionar eso?

La forma más sencilla de hacerlo es almacenar las llamadas javascript en un plugin o JavascriptInterface y tener método de repetición en su lado javascript que lo ejecuta. De esta forma nunca se llama loadUrl .

Algo como:

 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): } } 

A continuación, utilizando un javascriptInterface:

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

Agregue su interfaz javascript a su webview:

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

Y en su código javascript establecer un intervalo de tiempo para recuperar la función almacenada.

EDITAR

Acabo de encontrar esta respuesta , muestra que el mío tiene un gran problema, los métodos no están sincronizados. Significado cuando llamas a getJavascript() nuestra variable sb puede no estar lista para ser leída todavía. He añadido el bit correspondiente a la fuente anterior.

UTILICE LOS CERRADURAS o su código no será fiable

Ese es un comportamiento esperado: al llamar a WebView.loadUrl() básicamente se está recargando la página, por lo tanto se WebView.loadUrl() .

Como alternativa, puede intentar determinar si se muestra el teclado virtual y retrasar la ejecución JS hasta que se oculte. Para obtener un método general para comprobar el estado del teclado virtual, consulte ¿Cómo comprobar la visibilidad del teclado del software en Android?

  • Cómo cargar un archivo js de los elementos en la vista web después de cargar html
  • window.close equivalente en Phonegap con InAppBrowser
  • Phonegap no muestra la alerta
  • Uso de LogCat para la depuración USB android del navegador
  • Superposición azul de OnClick
  • Ejecución de JavaScript dentro de un servicio en Android
  • Angular y ionicPush no funciona en android
  • ¿Qué es una buena alternativa iScroll que admita iOS, Android, WP8 y funcionalidad pull-to-refresh?
  • Obtener el ancho de ventana correcto después del cambio de tamaño o el evento orientationchange para Android
  • UnableToResolveError: no se puede resolver el módulo `merge` desde Bibliotecas / ART / React ART.js nativo
  • Ripple Emulator + proyecto androide con PhoneGap
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.