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é).

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?

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.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.