gpt4 book ai didi

android - 防止 WebView 抓取 onClickListener

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:28:03 25 4
gpt4 key购买 nike

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

我拥有的是一个带有 OnClickListener 的 CardView,用于制作 Toast (#toast1)。在 CardView 内部有多个 View 以及一个 WebView。

如其他地方所述,要通过 WebView 将点击传递到 CardView,我已完成以下操作:

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

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

现在发生的是:

  • 在边框和其他 View 上方,触发 clickListener 并出现 toast
  • 在 webView 上不会触发 clickListener。
  • 在返回 true 之前,在 WebView 的 touchLstener 中添加一个 toast(#toast2),它会被触发。

我的期望:

  • 点击会通过WebView传递
  • 添加了#toast2:首先显示#toast2,然后显示#toast1

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

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

对我来说这意味着:

  • true:不要将点击传递给下面的 View ,因为听众正在消费它
  • false:将点击传递到下面的 View ,因为听众没有使用它

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

最佳答案

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

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

这将指示此父 View 拦截所有将转到其 subview 的触摸事件,从而将第一级触摸处理限制到此 View 。

关于android - 防止 WebView 抓取 onClickListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31938981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com