Combinación de combinación de Android :: OnTouchListener && OnClickListener
Descripción del problema:
Tengo un TextView
en un RelativeLayout
y quiero color rojo cuando el usuario lo toca, y ir a otra página cuando hace clic en él. Así que traté de establecer un OnClickListener
para hacer el clic, y un OnTouchListener
para implementar la función táctil ( MotionEvent.ACTION_DOWN
), pero esta combinación no funciona, porque OnTouchListener
hace OnClickListener
no funcional (no sé por qué).
- Evita que los botones oculten el teclado virtual en Android
- Aplicar estilo diferente al botón cuando se presiona
- Androide. ¿Cómo puedo mantener un botón visualizado como PRESSED hasta que termine la acción creada por ese botón?
- ¿Cómo puedo mantener un botón tan presionado después de hacer clic en él?
- Cambio de estilo TextView state_pressed / state_focused / state_selected
En los foros la gente dice que podemos implementar OnClick
por el OnTouch MotionEvent.ACTION_UP
, pero éste se puede desencadenar de mi presentación de TextView
(el TextView va a ser pulsado si lo presiona y arrastra el dedo de él para liberar) y esto No es el comportamiento deseado porque quiero:
Haga clic en = presione + liberación en el TextView.
¿Puede alguien darme una solución para esto, por favor?
- Evento de supervivencia de botón de Android
- Cambiar automáticamente el fondo del botón y el aspecto del texto cuando se presiona (como iOS)?
Puede llamar View.performClick () cuando action_up. Espero eso ayude.
your_txtView.setOnClickListener(new TextView.OnClickListener(){ public void onClick(View v) { // TODO Auto-generated method stub } }); your_txtView.setOnTouchListener(new TextView.OnTouchListener(){ @Override public boolean onTouch(View v, MotionEvent event) { if (MotionEvent.ACTION_DOWN == event.getAction()) { } else if (MotionEvent.ACTION_UP == event.getAction()) { v.performClick(); } return true; } });
Adel, ¿es el problema con el primer clic, o no obtienes ningún clic en absoluto?
Hay este problema si tiene varios diseños que se pueden hacer clic y no obtiene ningún evento de clic para el primero. Eso es porque hace que primero se selecciona y luego se obtiene el evento de clic, pruebe el código a continuación.
private class CustomTouchListener implements OnTouchListener { @Override public boolean onTouch(View v, MotionEvent event) { TextView tv = (TextView) v.findViewById(R.id.single_line_text); if (event.getAction() == MotionEvent.ACTION_DOWN) { tv.setTextColor(COLOR_WHEN_PRESSED); } else if (event.getAction() == MotionEvent.ACTION_UP) { tv.setTextColor(COLOR_WHEN_RELEASED); // Action of click goes here } else if (event.getAction() == MotionEvent.ACTION_CANCEL) { tv.setTextColor(COLOR_WHEN_RELEASED); // To handle release outside the layout region } return false; } }
Esto está funcionando en mi implementación actual si establece el oyente táctil para su diseño.
También es necesario establecer a continuación en su diseño
android:focusable="true" android:focusableInTouchMode="true" android:clickable="true"
¡¡¡Espero eso ayude!!!
EDIT: Además, debe haber una marca en DOWN y UP. Establecer en DOWN y comprobar si su conjunto en UP. Esto evitará un error en el que el usuario pueda tocar en cualquier parte de la pantalla y luego colocarlo en su texto y liberarlo.
Tenía el mismo problema. Se resolvió devolviendo false de ACTION_MOVE. He estado luchando con él durante pocas horas, intentando varias cosas, pero parece que he mantenido con vistas a este pequeño tema … Y ahora tiene sentido. Cuando devuelve true de onTouch, se detiene el procesamiento posterior, de modo que OnClickListener no tiene conocimiento de ningún movimiento y disparador onClick incluso después de que el puntero se haya desplazado fuera de la vista.