在Android WebView中读取键盘事件

我想在android web视图中听重要事件。 用户填写表单时的示例,我应该收到关键事件。 这是我的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; } ..... } 

当用户键入文本框或文本区时, onKeyDownonKeyUponKey都不会被调用。 是否有可能实现这一目标,或者Android是否限制了可能的隐私违规行为?

Solutions Collecting From Web of "在Android WebView中读取键盘事件"

警告! 该解决scheme仅支持英文字母。

完成后无需访问HTML源代码或JS事件。 适用于Android 5.0.2的软硬件键盘。

 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: // eg get space and enter events here break; } return dispatchFirst; } } 

这里的技巧是用一个简化的覆盖InputConnection的系统提供的input实现。 阻止开发者默认访问事件是由Google员工进行的。 因为关键事件input不再是唯一的一个。 有手势,声音等等。 官方的build议是“停止依靠遗留关键事件进行文本input” 。 在此处查看更多详情: https : //code.google.com/p/android/issues/detail?id=42904#c15

您可以使用覆盖 WebViewClient类的onUnhandledKeyEvent()函数。 为我完美的作品。

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? 

我不知道你是否已经尝试过,但是…或者,你可以为你的“MyWebViewClass”启用javascript,并使用javascript事件来调用java代码使用webView.addJavascriptInterface(….等)

全文: – http://developer.android.com/guide/webapps/webview.html#BindingJavaScript