从 API 级别 9 开始,有android:filterTouchesWhenObscured
属性及对应setFilterTouchesWhenObscured
方法上ViewGroup
。例如,当视图有onClickListener
设置并且另一个视图遮挡该视图(例如覆盖面板、吐司或其他任何内容),那么触摸将不会传递到被遮挡的视图 - 在我的示例中,onClick
不会被解雇。
但是,这在 API 级别 7 中不可用 - 对于我的项目,要求是 Android 2.1 及更高版本,这意味着我必须使用级别 7。
有简单的方法吗?在第 7 级中,该属性本质上被硬编码为 FALSE。结果,我得到了这种奇怪的行为:在视图上,我有一个按钮。按下时,另一个视图会滑入到位,并用按钮覆盖该视图。在此视图中,有其自己的按钮,但它与下方按钮的位置不匹配。因此,如果用户触摸覆盖面板下方按钮所在的位置,onClick
该按钮的再次触发 - 不是我想要/需要的。
我能做什么来预防onClick
在这种情况下开火?谢谢。
事实证明,没有办法做到这一点。在 API 级别 9 之前的 Android 中,有两种方法可以解决该问题:
从底层视图中删除侦听器(在我的例子中,我有大约十几个侦听器,我需要将其删除,然后在覆盖层再次不可见后重新设置);或者
添加一个空的 onClickListener (即拦截click
事件并且不对其执行任何操作)在整个覆盖层上 - 这就是我在我的例子中处理它的方式。
有趣的是,接收模糊视图的行为click
events 被报告为 Android 早期版本中的一个错误,但该错误已被关闭,表明它不是一个错误,而是一个预期的功能(但我不明白为什么有人会想要该功能)。我想android:filterTouchesWhenObscured
属性是在第 9 级添加的,以安抚所有不满的开发人员:)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)