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> 

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.

  • OnClickListener no se puede resolver a un tipo (Eclipse)
  • Android: El botón personalizado OnClickListener no se invoca
  • Android: Cómo propagar el evento de clic a los hijos de LinearLayout y cambiar su drawable
  • Cómo utilizar el botón onclick en baseAdapter
  • ¿Cómo exactamente el atributo android: onClick XML difiere de setOnClickListener?
  • Android: ¿Cómo vas a otra actividad al hacer clic?
  • ¿Cómo evitar disparar varias veces un evento onClick cuando el usuario presiona el botón más de una vez realmente rápido?
  • Cómo obtener OnClick () de los botones agregados mediante programación?
  • Obtener la latitud y la longitud de un clic en el mapa en osmdroid
  • En EditText, aparece un diálogo al hacer clic en un subconjunto específico de texto
  • ¿Hay una manera de simular un clic en la pantalla en el dispositivo Android a través de código?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.