【问题标题】: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

WebviewCrosswalk 都可以。

【问题讨论】:

    标签: android webview crosswalk xwalkview


    【解决方案1】:

    在 javascript 中向窗口对象添加两个函数: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 中的密钥,你就可以调用自定义 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 函数检查我要处理的所有键的列表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-17
      • 1970-01-01
      • 2015-03-22
      • 2013-10-23
      • 1970-01-01
      相关资源
      最近更新 更多