Android WebView onKeyListener不工作

Android WebView onKeyListener不工作,android,android-webview,Android,Android Webview,我必须截取屏幕上的触摸,这是我的代码: mWebView = findViewById(R.id.webview); mWebView.setWebViewClient(new WebViewClient()); mWebView.loadUrl(URL); mWebView.setOnTouchListener(this); mWebView.setOnKeyListener(this); 我的听众: @Override public boolean

我必须截取屏幕上的触摸,这是我的代码:

    mWebView = findViewById(R.id.webview);
    mWebView.setWebViewClient(new WebViewClient());
    mWebView.loadUrl(URL);
    mWebView.setOnTouchListener(this);
    mWebView.setOnKeyListener(this);
我的听众:

@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
    if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
        Log.i(TAG, "Hello, touch.");
        onTouchEvent();
        return false;
    }
    return false;
}

@Override
public boolean onKey(View view, int i, KeyEvent keyEvent)
{
    Log.i(TAG, "Hello, onKey.");
    onTouchEvent();
    return false;
}

虽然on touch在触摸屏上工作正常,但它不会截获键盘上的触摸事件。出于这个原因,我添加了onkeylistener,但它没有拦截关键事件。最后一件事是,我不关心键入的内容,只关心是否触摸了屏幕。

根据我最近的经验,在setWebViewClient()之前调用loadUrl()的行为令人费解且不一致,我会在设置与多线程WebView相关的任何内容后尝试调用loadUrl()。这包括setOnTouchListener()和setOnKeyListener()。
我意识到我的回答可能对您的特定问题没有帮助,但它可能会帮助其他经历过类似行为并在调用loadUrl()之前进行设置的人。

如果要检测按键,请尝试覆盖

onKeyPreIme(int keyCode, KeyEvent event);

为什么不尝试按下键

 @Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if(event.getAction() == KeyEvent.ACTION_DOWN){
        switch(keyCode)
        {
        case KeyEvent.KEYCODE_BACK:
            if(webView.canGoBack()){
                webView.goBack();
            }else{
                finish();
            }
            return true;
        }

    }
    return super.onKeyDown(keyCode, event);
}

@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:
                // e.g. get space and enter events here
                break;
        }
    return dispatchFirst;
}
重写此方法-->onUnhandledKeyEvent(WebView视图, 关键事件(事件)

详情如下:

@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:
                // e.g. get space and enter events here
                break;
        }
    return dispatchFirst;
}
注意:-


谷歌故意阻止开发人员默认访问事件。因为键事件输入不再是唯一的输入。这里有手势,声音,还有更多的东西。官方建议“完全停止依赖遗留的关键事件来输入文本”。查看此处的更多详细信息:

您有解决问题的方法吗?我不确定在这种情况下,赏金应该如何运作。虽然我还记得我正在做的项目,但这个问题已经很老了,我对解决方案不再感兴趣(最重要的是,我无法测试它们)@自从你创造了赏金,你认为Wini answers会清除它吗?我应该接受这个答案吗?请让我们知道。