首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WebView onKeyListener不工作

WebView onKeyListener不工作
EN

Stack Overflow用户
提问于 2018-06-26 08:43:01
回答 3查看 1.3K关注 0票数 2

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

代码语言:javascript
复制
    mWebView = findViewById(R.id.webview);
    mWebView.setWebViewClient(new WebViewClient());
    mWebView.loadUrl(URL);
    mWebView.setOnTouchListener(this);
    mWebView.setOnKeyListener(this);

我的听众:

代码语言:javascript
复制
@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触摸对屏幕上的触摸很好,但它不会拦截键盘上的触摸事件。出于这个原因,我添加了onkeylistener,但它没有拦截关键事件。作为最后一件事,我不在乎什么是打字,但只是如果屏幕已经被触摸。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-07-16 10:25:42

为什么不试试onkeyDown呢?

代码语言:javascript
复制
 @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);
}

重写此方法-> onUnhandledKeyEvent (WebView视图,KeyEvent事件)

更多详情如下:

https://developer.android.com/reference/android/webkit/WebViewClient.html#onUnhandledKeyEvent(android.webkit.WebView,%20android.view.KeyEvent)

代码语言:javascript
复制
@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;
}

注:-

默认情况下,阻止开发人员访问事件是谷歌员工故意做的。因为键事件输入不再是唯一的输入了。有手势,有声音,还有更多。官方建议是“完全停止依赖遗留的关键事件来输入文本”。在这里查看更多详细信息:https://code.google.com/p/android/issues/detail?id=42904#c15

票数 3
EN

Stack Overflow用户

发布于 2018-06-26 16:17:44

根据我最近在loadUrl()之前调用setWebViewClient()的令人费解和不一致的行为的经验,在设置与多线程WebView有关的任何操作之后,我会尝试调用loadUrl()。其中包括setOnTouchListener()和setOnKeyListener()。我意识到,我的答案可能无助于您的具体问题--但它可能会帮助其他经历过类似行为并在调用loadUrl()之前设置好事情的人。

票数 0
EN

Stack Overflow用户

发布于 2018-06-27 09:11:10

如果要检测keypress,请尝试覆盖

代码语言:javascript
复制
onKeyPreIme(int keyCode, KeyEvent event);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51038546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档