如何创建一个覆盖触摸事件到其下方的UI的叠加层?

Neo*_*ang 10 android overlay android-layout android-framelayout

我使用了一层具有半透明背景的framelayout来创建叠加层.但是此叠加层不会阻止触摸事件与其下方的视图进行交互.应如何创建阻止所有触摸事件的叠加层?

PPD*_*PPD 26

如果叠加未获得触摸事件,则事件将传递到基础视图,因此要在其下方的视图中阻止触摸事件,使您的叠加可触摸 android:clickable="true"


Anj*_*ali 10

以下代码将在所有内容之上添加叠加:

View v1 = new View(this);    
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
 1000,
 50,
 WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
 WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
 WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN,
 PixelFormat.OPAQUE);

params.gravity = Gravity.BOTTOM;
WindowManager wm = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);
wm.addView(v1, params);
Run Code Online (Sandbox Code Playgroud)

阻止触摸事件要么你必须改变标志或下面的代码将工作:

protected boolean onTouchEvent (MotionEvent me) {
    return true;
}
Run Code Online (Sandbox Code Playgroud)

对于v1,您可以进行导入:

import android.view.View.OnTouchListener;
Run Code Online (Sandbox Code Playgroud)

然后设置onTouchListener:

v1.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        return true;
    }
})
Run Code Online (Sandbox Code Playgroud)


Ble*_*ose 8

下面的代码对我有用.我已添加android:clickable="true"阻止触摸事件到其下面的其他视图.

这是在叠加层内部使用ProgressBar的示例.如果您不想使用ProgressBar,则可以在没有它的情况下使用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>
Run Code Online (Sandbox Code Playgroud)


Âng*_*tto 5

改进 Blesson Jose 答案,如果您使用视图来阻止触摸,则需要设置android:focusable="true"和。android:clickable="true"