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.

  • Botón creado dinámicamente de Android: setOnClickListener no funciona
  • Método onClick de Android
  • No se pudo encontrar un método onClick (View) en la clase de actividad android.view.ContextThemeWrapper para onClick handler
  • Listview no se puede hacer clic cuando se puede seleccionar la vista de texto dentro de esa vista de lista
  • OnClick PendingIntent en widget a veces no funciona
  • RecyclerView onClick
  • Android Clic en el texto de la pantalla
  • Cambiar el contenido de la ficha dependiendo del elemento del hilador seleccionado
  • Cómo configurar onclick listener para un botón en un fragmento en android
  • OnClick no activado en LinearLayout con el niño
  • Android MediaPlayer Singleton
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.