阻止WebView抓取onClickListener

bvo*_*mer 4 android ontouchlistener android-webview onclicklistener

我知道这经常被问到,但所有的解决方案(我发现)都不适合我.

我所拥有的是带有OnClickListener制作Toast(#toast1)的CardView.在CardView内部,有多个视图和WebView.

如其他地方所述,要通过WebView点击进入CardView,我已经完成了以下操作:

  • android:clickable="false"在WebView XML中设置
  • 插入以下 CardView.setOnClickListener(...) WebView.setOnTouchListener( (view, event) -> true);

    我还用匿名方法替换了lambda,看看它是否只是这个.没变.

现在发生的事情是:

  • 在边框和其他视图上,将触发clickListener并显示toast
  • 在webView上,不会触发clickListener.
  • 在返回之前在webView的touchLstener中放一个toast(#toast2)true,它会被触发.

我期待的是:

  • Click将通过WebView传递
  • 添加#toast2:首先显示#astast2然后#toast1

有点令人困惑的是,在OnTouchListener的文档中,返回如下:

如果侦听器已使用该事件,则为true,否则为false.

对我来说,这意味着:

  • true:当侦听器使用它时,不要将点击传递给下面的视图
  • false:通过点击查看以下视图,因为侦听器没有使用它

但设置为false并没有改变任何东西.

Cha*_*sit 7

首先,我建议你熟悉android触摸处理系统 - 你可以在这个答案中找到一个非常好的描述.总结一下:触摸事件传播从层次结构的顶层开始,但触摸事件的实际处理从视图层次结构的最低层开始.至于您的问题的解决方案,我可能建议您以下列方式升级您的父级WebView并覆盖onInterceptTouchEvent:

@Override
public boolean onInterceptTouchEvent(MotionEvent e) {
    return true;
}
Run Code Online (Sandbox Code Playgroud)

这将指示此父视图拦截否则将转到其子视图的所有触摸事件,从而将第一级触摸处理限制为此视图.