如何创建一个覆盖层,阻止其下方的UI接收触摸事件?

14

我使用了半透明背景的Framelayout层来创建覆盖图层。但是这个覆盖层不能阻止触摸事件与其下方的视图进行交互。如何创建一个可以阻止所有触摸事件的覆盖层呢?


可能是重复的问题:如何禁用Framelayout后面的视图点击事件 - Mehdi Dehghani
这个回答解决了你的问题吗?Android:如何防止任何触摸事件从一个视图传递到它下面的视图? - General Grievance
4个回答

37
如果覆盖层没有触摸事件,那么事件会传递给底部视图,因此要阻止下方视图中的触摸事件,请使您的覆盖层具有可触摸性。 android:clickable="true"

这个方法有效,除非您打开了带有编辑文本聚焦的Android键盘:键盘仍会截取触摸事件。 - Mattia Ruggiero
我想将触摸传递到下面的屏幕。请看一下 https://dev59.com/v63la4cB1Zd3GeqPR8R0 - Zar E Ahmer
1
真是不可思议!最佳解决方案! - Boris Salimov

9
以下代码对我有用。我已经添加了android:clickable="true"来阻止下面其他视图的触摸事件。
这是一个带有进度条的叠加层示例。如果不需要进度条,可以使用不带进度条的FrameLayout。
<FrameLayout
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/progress_overlay"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:alpha="0.4"
            android:animateLayoutChanges="true"
            android:background="@android:color/black"
            android:visibility="gone"
            android:clickable="true">

            <ProgressBar
                style="?android:attr/progressBarStyleLarge"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:indeterminate="true"/>

</FrameLayout>

5

要改进Blesson Jose的回答,如果您正在使用View来阻止触摸,则需要设置android:focusable="true"android:clickable="true"


1
将按钮放置在覆盖图层上,然后设置该按钮android:background="@null",它会阻止下面的视图触摸事件。希望这可以解决您的问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接