【问题标题】:Analogue of android:filterTouchesWhenObscured for API level below 9API 级别低于 9 的 android:filterTouchesWhenObscured 的类似物
【发布时间】:2012-06-15 16:22:47
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 2.是我处理这个案子的方式
    猜你喜欢
    • 1970-01-01
    • 2021-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-09
    • 2019-02-15
    • 2013-04-21
    • 1970-01-01
    相关资源
    最近更新 更多