2012-04-23 20 views
8

Tengo un contenedor FrameLayout que contiene muchas cosas (incluyendo ScrollView, WebView, ViewPager ...).¿Cómo puedo desactivar todos los eventos táctiles en todos los elementos secundarios de un ViewGroup?

Me gustaría ser capaz de desencadenar el evento de clic en este contenedor, pero parece que algunos de ScrollView, WebView y ViewPager interceptar los eventos táctiles, ya que el evento de clic se activa sólo cuando hago clic en las partes de la contenedor que no tiene ninguno de ellos ...

¿Cómo puedo desactivar todos los eventos táctiles en los elementos secundarios del contenedor para poder activar OnClick en cualquier lugar del mismo?

ACTUALIZACIÓN

La idea es tener algo así como el administrador de tareas en Android 3.2, es decir, donde se muestra la pantalla visible actual de la aplicación como un icono reducida, que se puede hacer clic.

Gracias

Respuesta

15

Puede ser que he entendido algo, pero supongo que la respuesta a su pregunta es muy simple: Si no desea enviar ninguno de los eventos de toque para los niños - por lo que sólo necesita anular ViewGroup.onInterceptTouchEvent (MotionEvent ev)API reference así:

public boolean onInterceptTouchEvent (MotionEvent ev){ 
    return true; 
} 

De acuerdo con la documentación de Android, esto significa que su ViewGroup siempre interceptará todos los eventos táctiles y no los enviará a los niños. Todos ellos serán dirigidos al método ViewGroup.onTouchEvent(MotionEvent ev) de su ViewGroup.

0

Se podría desactivarlas como esto:

FrameLayout parent = (FrameLayout)findViewById(some_id); 
disableChildsOnTouch(parent) 


public void disableChildsOnTouch(ViewGroup viewGroup){ 
    int cnt = viewGroup.getChildCount(); 
    for (int i = 0; i < cnt; i++){ 
     View v = viewGroup.getChildAt(i); 
     if (v instanceof ViewGroup){ 
      disableChildsOnTouch((ViewGroup)v); 
     } else { 
      v.setOnTouchListener(null); 
      v.setOnClickListener(null); 
      //v.SETYOURLISTENER(null) 
     } 
    } 
} 
+0

ScrollView sigue desplazándose, y el contenedor onClick todavía no se activa al deshabilitar todos los elementos secundarios ... :( – jul

+0

no debería desplazarse scrollView? Si no, puede probar 'View v' arriba si es un scrollView y deshabilitar desplazándote hacia allí. No puedo contarte más con tanta información. Al menos podrías publicar tu XML para que vea, cuál podría ser el problema –

+0

He actualizado mi pregunta con el motivo por el que quiero hacer eso. Creo que se necesita más información: solo quiero poder desencadenar el evento onClick en un grupo de vistas que contenga vistas como scrollview, viewpager ... – jul

Cuestiones relacionadas