【问题标题】:How do I trigger any keycode key events in Android's webview?如何在 Android 的 webview 中触发任何 keycode 键事件?
【发布时间】:2018-03-24 10:03:59
【问题描述】:
例如,如果我希望网页获取 keycode 值为 - 1 的事件,我应该怎么做?
我尝试使用webview.dispatchKeyEvent(...),但如果KeyEvent的值不在KeyEvent.KEYCODE_XXX定义的常量中,则将其转换为keyEvent.KEYCODE_UNKNOWN。即页面接收到的事件keycode值为0
我该怎么办?
API 19
Webview 和 Crosswalk 都可以。
【问题讨论】:
标签:
android
webview
crosswalk
xwalkview
【解决方案1】:
在 javascript 中向窗口对象添加两个函数:keyDown 和 keyUp。
在您的主要活动中覆盖java dispatchKeyEvent 函数:
@Override
public boolean dispatchKeyEvent(KeyEvent event)
{
final int keyCode = event.getKeyCode();
final int keyAction = event.getAction();
if (keyAction == KeyEvent.ACTION_DOWN)
loadUrl("javascript:keyDown(" + keyCode + ")");
else if (keyAction == KeyEvent.ACTION_UP)
loadUrl("javascript:keyUp(" + keyCode + ")");
return true;
}
调整此功能以处理不支持的键。关键是,一旦你读取了 java 中的密钥,你就可以调用自定义 js 函数而不传递 '0' 值。
就我而言,我做到了:
@Override
public boolean dispatchKeyEvent(KeyEvent event)
{
final int keyCode = event.getKeyCode();
final int keyAction = event.getAction();
final boolean keySupported = KeyHelper.isKeySupported(keyCode);
if (keySupported)
{
if (keyAction == KeyEvent.ACTION_DOWN)
loadUrl("javascript:keyDown(" + keyCode + ")");
else if (keyAction == KeyEvent.ACTION_UP)
loadUrl("javascript:keyUp(" + keyCode + ")");
return true;
}
return super.dispatchKeyEvent(event);
}
isKeySupported 函数检查我要处理的所有键的列表。