¿Cómo manejar hacer clic en las vistas secundarias y tocar en los ViewGroups de los padres?
En mi diseño tengo una estructura como esa:
--RelativeLayout | --FrameLayout | --Button, EditText...
Quiero manejar eventos táctiles en RelativeLayout y FrameLayout, así que establezco el onTouchListener en estos dos grupos de vistas. Pero sólo se captura el toque en el RelativeLayout.
- Cómo inflar una vista en una posición determinada?
- Guardar hardware acelerado android lienzo como mapa de bits
- Cómo utilizar RenderScript con SurfaceView / View
- Haciendo que un botón sea más fácil de hacer clic
- ¿Cómo enviar la vista hacia atrás? ¿Cómo controlar la orden z de forma programática?
Para intentar solucionar esto, escribí mi propio CustomRelativeLayout, y anular el onInterceptTouchEvent
, ahora el clic en el ViewGroup hijo (FrameLayout) es capturado, pero el clic en los botones y otras vistas no produce ningún efecto.
En mi propio diseño personalizado, tengo esto:
public boolean onInterceptTouchEvent(MotionEvent ev) { return true; }
- Cómo obtener NoSuchMethodError con métodos TextView
- Iniciar nueva actividad desde SearchView
- Derecho a la izquierda ProgressBar?
- Vista personalizada de Android onMease onDraw lifecycle
- Gallery ImageAdapter convertView siempre es nulo
- No se puede importar android.support.design.widget.NavigationView
- Cambiar el tamaño del texto del elemento en la vista de navegación
- ¿Es posible desactivar el HeaderLayout que se puede hacer clic en NavigationView?
Necesita anular el onInterceptTouchEvent()
para cada niño, de lo contrario permanecerá un onTouchEvent
para el padre.
Interceptar eventos de toque en un grupo de vistas
@Override public boolean onInterceptTouchEvent(MotionEvent ev) { /* * This method JUST determines whether we want to intercept the motion. * If we return true, onTouchEvent will be called and we do the actual * scrolling there. */ ... // In general, we don't want to intercept touch events. They should be // handled by the child view. return false; }
Debe devolver un mensaje falso para que el niño lo maneje, de lo contrario, lo está devolviendo al padre.
Su solución personalizada capturará eventos táctiles desde cualquier lugar de su diseño relativo ya que el método sobreescrito se establece en siempre true.
Para su requisito supongo que es mejor utilizar el método onClick en lugar de usar onTouch.
El método OnTouch invoca diferentes subprocesos en cada TouchEvent y supongo que es la causa de tu problema
En lugar de manejar estos eventos, es mejor probar el método onClick.
- Android: ¿La lista de capas no funciona?
- Siempre ejecutando proguard antes de Android dex'ing en Eclipse