4

从 API 级别 9 开始android:filterTouchesWhenObscuredsetFilterTouchesWhenObscuredViewGroup. 例如,当一个视图已onClickListener设置并且另一个视图遮住了该视图(例如,覆盖面板、烤面包或其他任何东西)时,触摸将不会传递给被遮蔽的视图 - 在我的示例中,onClick不会触发。

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

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

在这种情况下,我能做些什么来防止onClick射击?谢谢。

4

1 回答 1

7

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

  1. 从底层视图中删除侦听器(在我的情况下,我有大约十几个,我需要删除它们,然后在覆盖层再次不可见后重新设置);或者

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

有趣的是,接收事件的隐藏视图的行为click在早期版本的 Android 中被报告为一个错误,但该错误已关闭,表明它不是错误而是预期的功能(我不明白为什么有人会想要那个功能尽管)。我想该android:filterTouchesWhenObscured属性是在第 9 级中添加的,以安抚所有不开心的开发人员:)

于 2012-06-18T10:36:57.427 回答