0

例如,如果我希望网页获取 keycode 值为 - 1 的事件,我应该怎么做?

我尝试使用webview.dispatchKeyEvent(...),但如果 的值KeyEvent不在 定义的常量中KeyEvent.KEYCODE_XXX,则将其转换为keyEvent.KEYCODE_UNKNOWN。即页面接收到的事件keycode值为0

我应该怎么办?

API 19

两者WebviewCrosswalk可以。

4

1 回答 1

1

在 javascript 中向 window 对象添加两个函数:keyDownkeyUp. 在您的主要活动中的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函数检查我要处理的所有键的列表。

于 2018-05-29T10:59:39.970 回答