android的类比:filterTouchesWhenObscured的API等级低于9

时间:2012-06-15 16:22:47

标签: android android-2.1-eclair obscured-view

从API级别9开始,android:filterTouchesWhenObscured上有setFilterTouchesWhenObscured个属性和相应的ViewGroup方法。例如,当一个视图设置了onClickListener并且另一个视图模糊了该视图(例如覆盖面板,吐司或其他任何东西)时,触摸将不会传递到模糊视图 - 在我的示例中,{{ 1}}不会被解雇。

但是,这在API级别7中不可用 - 对于我的项目,要求是Android 2.1及更高版本,这意味着我必须使用级别7。

有一个简单的方法吗?在级别7中,此属性基本上是硬编码为FALSE。结果,我得到了这种奇怪的行为:在一个视图上,我有一个按钮。按下时,另一个视图滑动到位,用按钮覆盖视图。在此视图中,有自己的按钮,但它与下方按钮的位置不匹配。因此,如果用户触摸下方按钮所在位置的覆盖面板,则会再次触发该按钮的onClick - 而不是我想要/需要的。

在这种情况下,我该怎样做才能阻止onClick解雇?感谢。

1 个答案:

答案 0 :(得分:6)

事实证明,没有办法做到这一点。在API级别9之前的Android中,有两种方法可以解决此问题:

  1. 从底层视图中删除侦听器(在我的情况下,我有大约十几个,我需要删除,然后重叠后再重新设置);或

  2. 在整个叠加层上添加一个空的onClickListener(即拦截click事件并对其执行任何操作) - 这就是我在我的情况下处理它的方式。

  3. 有趣的是,接收click事件的模糊视图的行为被报告为Android早期版本中的错误,但该错误已关闭,表明它不是错误而是预期的功能(我可以'不知道为什么有人会想要这个功能。我想在第9级添加了android:filterTouchesWhenObscured属性来安抚所有不开心的开发人员:)