¿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?

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

  • Uso de ItemizedOverlay y OverlayItem en Android Beta 0.9
  • No entiende el método drawAt () para com.google.android.maps.Overlay
  • Dibujar superposición en Android (en todo el sistema)
  • ¿Hay alguna forma de que los elementos de la interfaz de usuario se superpongan ligeramente (uno encima del otro) sin usar diseños absolutos?
  • Barra de navegación translúcida (Android 4.4) - Mostrar contenido debajo
  • Dibujo es constantemente llamado en mi superposición de mapa de Android
  • ¿Hay algún límite para dibujar la ruta usando Geocoder (Android)?
  • ¿Se puede ampliar el tamaño de la superposición con el mapa de google en android?
  • Especifique Layout Margen superior para la barra de acción de superposición
  • ¿Cómo puedo poner una vista encima de un glSurfaceView con un fondo transparente?
  • Disposición de Android: coloca una vista entre dos vistas
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.