Implementar onClick sólo para un compuesto TextView dibujable
Necesito tener algún texto con un dibujable a la izquierda y quiero ejecutar algún código cuando el usuario hace clic / toca la imagen (sólo la imagen, no el texto), así que utilicé un LinearLayout con un TextView y un ImageView que es Clickable y lanza un evento onClick. El analizador XML me sugiere que reemplace esto con un TextView con un compuesto dibujable , que dibujaría lo mismo con menos líneas de XML . Mi pregunta es "¿Puedo especificar que quiero manejar un evento onClick sólo en el dibujable de la TextView y no en el TextView en sí He visto algunas soluciones que implica escribir su propia extensión de TextView , pero sólo estoy interesado en poder hacerlo dentro del recurso de diseño, si es posible, de lo contrario voy a mantener lo siguiente Código XML :
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center" android:orientation="horizontal" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="bottom" android:paddingTop="10dp" android:paddingLeft="10dp" android:paddingRight="10dp" android:text="@string/home_feedback_title" android:textColor="@android:color/primary_text_dark" android:textStyle="bold" android:paddingBottom="4dp"/> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/action_feedback" android:clickable="true" android:onClick="onClickFeedback" android:contentDescription="@string/action_feedback_description"/> </LinearLayout>
- Android listview obtiene el elemento seleccionado
- El cajón de navegación inhabilita la vista trasera cuando el cajón está abierto
- Float: izquierda deja de hacer clic en evento en android?
- Android: clics retardados en ListView
- Haga clic en el elemento de lista de un ListView no responde
- Cómo configurar un spinner onClickListener () en Android
- android imageButton método onClick no llamando
- OnClickListener no se puede resolver a un tipo (Eclipse)
- Cerrar Spinner en clic fuera de Spinner
- Listview no se puede hacer clic cuando se puede seleccionar la vista de texto dentro de esa vista de lista
- Android Clic en el texto de la pantalla
- Cómo implementar un oyente de clic largo y onclicklistener en listview único
- Evitar que DialogFragment se rechace cuando se hace clic en el botón
Puedes ir de cualquier manera. El uso del compuesto es más rápido aunque se diseñó para ser una optimización. Utiliza menos memoria ram porque reduce 3 vistas en 1 y su diseño más rápido porque pierde 1 profundidad.
Si yo fuera tú me gustaría considerar retroceder para ver si tanto el texto como la imagen interceptar el tacto para hacer cualquier acción es posiblemente una buena cosa. En general, tener una región táctil más grande facilita la presión. Algunos usuarios pueden estar inclinados a tocar el texto en lugar de la imagen.
Por último, si usted va a esa ruta de la fusión de la 2 es posible que desee considerar el uso de un Button
lugar de un TextView
. Puede estilo el botón para no tener el rectángulo alrededor de él. Lo llaman un botón sin bordes. Es agradable porque obtiene retroalimentación visual que hizo clic en un elemento que se puede TextView
ya que como ImageView
o TextView
normalmente no se pueden realizar acciones.
Cómo crear botones sin bordes en Android
Es muy sencillo. Digamos que usted tiene un dibujable en el lado izquierdo de su TextView 'txtview'. A continuación le hará el truco.
TextView txtview = (TextView) findViewById(R.id.txtview); txtview.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if(event.getAction() == MotionEvent.ACTION_UP) { if(event.getRawX() <= txtview.getTotalPaddingLeft()) { // your action for drawable click event return true; } } return true; } });
Si desea que la opción if cambie a la derecha, haga la declaración if a:
if(event.getRawX() >= txtview.getRight() - txtview.getTotalPaddingRight())
Del mismo modo, usted puede hacerlo para todos los drawables compuestos.
txtview.getTotalPaddingTop(); txtview.getTotalPaddingBottom();
Esta llamada de método devuelve todo el relleno en ese lado incluyendo cualquier drawable. Puede usar esto incluso para TextView, Botón, etc.
Haga clic aquí para consultar el sitio de desarrolladores de android.
- Activación de un evento de mapa (como un clic de marcador) en Google Maps Android V2
- ¿Cómo leer el contenido del mensaje de un mensaje nuevo en el próximo mensaje en android?