gpt4 book ai didi

android - android :filterTouchesWhenObscured for API level below 9的模拟

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

从 API 级别 9 开始,ViewGroup 上有 android:filterTouchesWhenObscured 属性和相应的 setFilterTouchesWhenObscured 方法。例如,当一个 View 设置了 onClickListener 并且另一个 View 遮挡了该 View (例如覆盖面板、toast 或其他任何东西)时,触摸将不会传递到被遮挡的 View - 在我的示例中, onClick 不会被触发。

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

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

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

最佳答案

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

  1. 从底层 View 中移除监听器(在我的例子中,我有大约一打监听器,我需要移除它们,然后在叠加层再次变得不可见后重新设置);或者

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

有趣的是,接收 click 事件的模糊 View 的行为在早期版本的 Android 中被报告为错误,但该错误已关闭表明它不是错误而是预期的功能(我不明白为什么有人会想要这个功能)。我想 android:filterTouchesWhenObscured 属性是在 level 9 中添加的,目的是为了安抚所有不高兴的开发人员:)

关于android - android :filterTouchesWhenObscured for API level below 9的模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11054654/

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