例如,如果我希望网页获取 keycode 值为 - 1 的事件,我应该怎么做?
我尝试使用webview.dispatchKeyEvent(...)
,但如果 的值KeyEvent
不在 定义的常量中KeyEvent.KEYCODE_XXX
,则将其转换为keyEvent.KEYCODE_UNKNOWN
。即页面接收到的事件keycode值为0
我应该怎么办?
API 19
两者Webview
都Crosswalk
可以。
在 javascript 中向 window 对象添加两个函数: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 中的密钥,您就可以在不传递“0”值的情况下调用自定义 js 函数。
就我而言,我做了:
@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);
}
whereisKeySupported
函数检查我要处理的所有键的列表。