Creo que necesita usar uno de esos métodos para poder interceptar el evento antes de que se envíe a los componentes apropiados:
Activity.dispatchTouchEvent(MotionEvent)
- Esto permite que su Actividad intercepte todos los eventos táctiles antes de que se envíen a la ventana.
ViewGroup.onInterceptTouchEvent(MotionEvent)
- Esto permite que un ViewGroup observe los eventos a medida que se envían a las Vistas secundarias.
ViewParent.requestDisallowInterceptTouchEvent(boolean)
- Invoque esto en una Vista principal para indicar que no debe interceptar eventos táctiles con onInterceptTouchEvent (MotionEvent).
Más información aquí .
Espero que ayude.
Luis Miguel Serrano
fuente
@Override public boolean dispatchTouchEvent(MotionEvent ev) { ... }
Declarar su
TextView
no se puede hacer clic / enfocable mediante el usoandroid:clickable="false"
yandroid:focusable="false"
ov.setClickable(false)
yv.setFocusable(false)
. Los eventos de clic deben enviarse alTextView
padre de 'ahora.Nota:
Para lograr esto , debe agregar clic a su directo
parent
. o establecerandroid:clickable="false"
yandroid:focusable="false"
a su padre directo para pasar el oyente a otro padre .fuente
TextView#setOnClickListener()
en elTextView
, se puede hacer clic, incluso si se declara comoandroid:clickable="false"
, e incluso si elClickListener
está configurado ennull
(setOnclickListener(null)
)android:inputType
atributo, consumirá silenciosamente los eventos de clic incluso con clickable: false y focusable: false; en mi caso estaba ambientado en un estilo y me costó 30 minutos descubrir la causa.A veces, solo esto ayuda:
Otra variante, no siempre funciona:
fuente
CardView
como vista secundaria, ya queCardView
parece ignorarclickable="false"
yfocusable="false"
. Sin embargo, usarsetOnTouchListener
y llamaronTouchEvent
al padre le permite al padre mostrar retroalimentación táctil (por ejemplo, efecto dominó).Poner
en child, las vistas obtienen su estado dibujable (enfocado, presionado, etc.) de su padre directo en lugar de sí mismo. puede configurar onclick para los padres y llamar al niño cuando se hace clic
fuente
Si
TextView
crea problemas de clic, elimíneloandroid:inputType=""
de su archivo xml.fuente
android:inputType="none"
Esta respuesta es similar a la respuesta de Alexander Ukhov , excepto que usa eventos táctiles en lugar de eventos de clic. Estos eventos permiten que el padre muestre los estados de presión adecuados (por ejemplo, efecto dominó). Esta respuesta también está en Kotlin en lugar de Java.
fuente
Si quieres tanto
OnTouch
yOnClick
escucha para padres e hijos vista tanto, por favor utilice a continuación truco:El usuario ScrollView como una vista principal y dentro de eso colocó su vista secundaria dentro de Relative / LinearLayout.
Haga que Parent ScrollView
android:fillViewport="true"
no se desplace por View.A continuación, configure el
OnTouch
oyente como padre y elOnClick
oyente como vistas secundarias. Y disfruta de las devoluciones de llamada de ambos oyentes.fuente