我知道这经常被问到,但所有解决方案(我发现)都不适合我。
我所拥有的是带有OnClickListener制作Toast(#toast1)的CardView。 在CardView内部,有多个视图和WebView。
正如其他地方所提到的,要通过WebView将点击传递给CardView,我已经完成了以下操作:
android:clickable="false"
在CardView.setOnClickListener(...)
下插入以下内容
WebView.setOnTouchListener( (view, event) -> true);
我还用匿名方法替换了lambda,看看它是否就是这样。没有变化。
现在发生的事情是:
true
之前,还要在WebView的touchLstener中添加一个toast(#toast2),然后触发它。我的期望:
有点令人困惑的是,在OnTouchListener的文档中,回复如下:
如果监听器已经使用了该事件,则为true,否则为false。
对我来说意味着:
true
:当听众消耗它时,不要点击下面的视图false
:点击下方视图,因为听众没有消费它但设置为false并没有改变任何东西。
答案 0 :(得分:7)
首先,我建议你熟悉android触摸处理系统 - 你可以在this answer找到一个非常好的描述。总结一下:触摸事件传播从层次结构的顶层开始,但触摸事件的实际处理从视图层次结构的最低层开始。至于您的问题的解决方案,我建议您以下列方式提升WebView
的父级并覆盖onInterceptTouchEvent
:
@Override
public boolean onInterceptTouchEvent(MotionEvent e) {
return true;
}
这将指示此父视图拦截否则将转到其子视图的所有触摸事件,从而将第一级触摸处理限制为此视图。