studio programacion herramientas fundamentos descargar con avanzado aplicaciones android webview android-webview android-softkeyboard keyevent

programacion - manual android studio avanzado



Leer eventos de teclado en Android WebView (3)

Estoy tratando de escuchar eventos clave en la vista web de Android. Ejemplo cuando el usuario está llenando un formulario, debería recibir los eventos clave. Este es mi código WebView

public class MyWebView extends WebView implements OnKeyListener { ..... @Override public boolean onKeyDown(int keyCode, KeyEvent event) { Log.i("PcWebView", "onKeyDown keyCode=" + keyCode); return super.onKeyDown(keyCode, event); } @Override public boolean onKeyUp(int keyCode, KeyEvent event) { Log.i("PcWebView", "onKeyUp keyCode=" + keyCode); return super.onKeyUp(keyCode, event); } @Override // Listener is initialized in the constructor public boolean onKey(View v, int keyCode, KeyEvent event) { Log.i("PcWebView", "onKey keyCode=" + keyCode); return false; } ..... }

ninguno de los métodos onKeyDown , onKeyUp y onKey se onKey cuando el usuario escribe en las cajas de texto o áreas de texto. ¿Es posible lograr esto o tiene Android restringido este b''cos de una posible violación de la privacidad?



Puede usar la función onUnhandledKeyEvent () en la clase WebViewClient. Funciona perfectamente para mi

onUnhandledKeyEvent

@Override public void onUnhandledKeyEvent(WebView view, KeyEvent event) { return; } whenever a user presses any key on the keyboard, this event will get fire. Please let me know if that''s works for you?


¡Precaución! Esta solución solo admite letras en inglés.

Realizado sin ningún acceso al código fuente HTML o eventos JS. Funciona para mí en Android 5.0.2 para teclados suaves y de hardware.

public class MyWebView extends WebView { @Override public InputConnection onCreateInputConnection(EditorInfo outAttrs) { return new BaseInputConnection(this, false); //this is needed for #dispatchKeyEvent() to be notified. } @Override public boolean dispatchKeyEvent(KeyEvent event) { boolean dispatchFirst = super.dispatchKeyEvent(event); // Listening here for whatever key events you need if (event.getAction() == KeyEvent.ACTION_UP) switch (event.getKeyCode()) { case KeyEvent.KEYCODE_SPACE: case KeyEvent.KEYCODE_ENTER: // e.g. get space and enter events here break; } return dispatchFirst; } }

El truco aquí es anular la implementación de entrada proporcionada por el sistema de InputConnection con una simplificada. Evitar que los desarrolladores accedan a los eventos por defecto fue realizado por Googlers a propósito. Porque la entrada del evento clave ya no es la única. Hay gestos, voz y más viene. La recomendación oficial es "dejar de confiar en eventos clave heredados para la entrada de texto en absoluto" . Consulte más detalles aquí: https://code.google.com/p/android/issues/detail?id=42904#c15