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 para detectar cuando se mantiene pulsado un botón
- distinguir un golpe y hacer clic en android (pasar el evento a otra vista si es un golpe)
- Evento onClick no está desencadenando | Androide
- Android principiante: toque eventos en android gridview
- Establecer determinado elemento en la vista de cuadrícula que no se puede hacer clic
- Adaptador personalizado para gridview en android
- Método onClick no se llama en Android
- Descartar Snackbar A la izquierda deslizar
- Cómo establecer el evento onClick en un ImageButton?
- Fragmento onListItemClick
- La forma más fácil de tener el botón de abrir el navegador a la URL específica
- Animación de android imageview onClick
- OnClickListener en TranslateAnimation
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?