¿Cómo crear una superposición que bloquea los eventos de toque a la interfaz de usuario debajo de él?
Utilicé una capa de framelayout con un fondo semi-translúcido para crear una superposición. Sin embargo, esta superposición no bloquea los eventos táctiles para interactuar con las vistas que se encuentran debajo. ¿Cómo crear una superposición que bloquea todos los eventos de toque?
- Colocar una vista de imagen como imagen de superposición en la vista previa de la cámara
- Teclado sobre EditText en segundo clic
- Cómo dibujar polígono mano libre en Google mapa V2 en Android?
- ¿Por qué mi sistema se superpone capturando todos los toques (no es posible interacción con la vista subyacente)
- Primera vista arriba / superpuesta en LinearLayout
- Android: ItemizedOverlay onTouchEvent y onTap se superponen
- Comportamiento extraño en el navegador de Android al seleccionar campos
- Cómo obtener el largo y lat valor de cuatro esquinas en el mapa en android?
- Cómo crear una superposición de información en Android
- Android cómo dibujar la pintura en mano libre en MapView con superposición?
- Superponer una actividad en otra actividad O superponer una vista sobre otra
- Aplicación de una superposición (filtro de imagen) a un mapa de bits
- Alternativa de Android a MetroGridHelper
El siguiente código agregará superposición encima de todo:
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);
Para bloquear el evento táctil ya sea que tenga que cambiar la bandera o por debajo del código funcionará:
protected boolean onTouchEvent (MotionEvent me) { return true; }
Para v1 haría una importación:
import android.view.View.OnTouchListener;
A continuación, establezca el onTouchListener:
v1.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { return true; } })
Si la superposición no obtiene los eventos táctiles, entonces los eventos se pasan a la vista subyacente, por lo que para bloquear el evento táctil en las vistas que se encuentran debajo, haga que su superposición toque el android:clickable="true"
Debajo del código ha funcionado para mí. He añadido android:clickable="true"
para bloquear eventos táctiles a otras vistas debajo de él.
Este es un ejemplo con un ProgressBar dentro de la superposición. Si no desea la ProgressBar, puede usar FrameLayout sin ella.
<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>
Ponga el botón sobre la capa de capa. Entonces ponga ese botón androide: background = "@ null" bloquea el evento del tacto de la visión debajo de él. .hope él soluciona su problema