我必须拦截屏幕上的触摸,这是我的代码:
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触摸对屏幕上的触摸很好,但它不会拦截键盘上的触摸事件。出于这个原因,我添加了onkeylistener,但它没有拦截关键事件。作为最后一件事,我不在乎什么是打字,但只是如果屏幕已经被触摸。
发布于 2020-07-16 10:25:42
为什么不试试onkeyDown呢?
@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事件)
更多详情如下:
或
@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
发布于 2018-06-26 16:17:44
根据我最近在loadUrl()之前调用setWebViewClient()的令人费解和不一致的行为的经验,在设置与多线程WebView有关的任何操作之后,我会尝试调用loadUrl()。其中包括setOnTouchListener()和setOnKeyListener()。我意识到,我的答案可能无助于您的具体问题--但它可能会帮助其他经历过类似行为并在调用loadUrl()之前设置好事情的人。
发布于 2018-06-27 09:11:10
如果要检测keypress,请尝试覆盖
onKeyPreIme(int keyCode, KeyEvent event);https://stackoverflow.com/questions/51038546
复制相似问题