其他分享
首页 > 其他分享> > android – 防止WebView抓取onClickListener

android – 防止WebView抓取onClickListener

作者:互联网

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

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

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

>在WebView XML中设置android:clickable =“false”
>在CardView.setOnClickListener(…)下插入以下内容
WebView.setOnTouchListener((view,event) – > true);

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

现在发生的事情是:

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

我期待的是:

>单击将通过WebView传递
>添加#toast2:首先显示#astast2然后#toast1

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

True if the listener has consumed the event, false otherwise.

对我来说,这意味着:

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

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

解决方法:

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

@Override
public boolean onInterceptTouchEvent(MotionEvent e) {
    return true;
}

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

标签:android,android-webview,onclicklistener,ontouchlistener
来源: https://codeday.me/bug/20190611/1221933.html