Android: Cómo propagar el evento de clic a los hijos de LinearLayout y cambiar su drawable
Quisiera crear una disposición linear que se comportaría similar a ImageButton.
<LinearLayout android:id="@+id/container" style="?WidgetHomeIconContainer"> <ImageView android:id="@+id/icon" style="?WidgetHomeIcon" /> <TextView android:id="@+id/title" style="?WidgetHomeLabel" android:text="@string/title" android:textAppearance="?attr/TextHomeLabel" /> </LinearLayout>
En estilos de ImageView, TextView y LinearLayout, establezco selectores para todos los estados.
- OnClick posición en cadena en TextView
- Android cómo escribir clic evento de un ImageView
- RecyclerView onItemClicked devolución de llamada
- Aceptar eventos de clic en RelativeLayout
- Phonegap 2.4.0 con Android 4.2 - comportamiento de doble clic extraño
Ahora:
- Cuando hago clic en ImageView (lo intenté también con ImageButton) – se comporta correctamente y la imagen se cambia de acuerdo al selector xml.
- Cuando hago clic en LinearLayout – se hace clic en el diseño lineal, pero el ImageView y TextView no cambian su aspecto / aspecto
Así que me gustaría hacer lo siguiente. Cuando hago clic en LinearLayout padre, necesito cambiar todos los childs a estado presionado.
He intentado añadir el siguiente código a LinearLayout onClickListener para propagar el clic:
@Override public void onClick(View v) { LinearLayout l = (LinearLayout) v; for(int i = 0; i < l.getChildCount(); i++) { l.getChildAt(i).setClickable(true); l.getChildAt(i).performClick(); } }
Pero todavía reamins lo mismo. Muchas gracias por cualquier ayuda.
- Android listview obtiene el elemento seleccionado
- ¿Cómo escribir el método onClick en el viewpager?
- ¿Cómo comprobar si la casilla de verificación android está marcada dentro de su método onClick (declarado en XML)?
- ¿Cómo exactamente el atributo android: onClick XML difiere de setOnClickListener?
- Obtener contexto dentro de onClick (DialogInterface v, int buttonId)?
- Iniciar nueva actividad desde ListFragment utilizando onListItemClick ()
- Android no puede encontrar el método desde el botón onClick en ListView Row
- cómo hacer clic en el botón de acción flotante en un fragmento?
Poner
android:duplicateParentState="true"
En su ImageView y TextView .. entonces las vistas obtienen su estado dibujable (enfocado, presionado, etc.) de su padre directo en lugar de de sí mismo.
No sólo para cada niño:
android:duplicateParentState="true"
Pero también adicionalmente:
android:clickable="false"
Esto evitará un comportamiento inesperado (o la solución simplemente no funcionará) si se utilizan vistas secundarias que se pueden hacer clic .
SO Fuente
Después de tener el mismo problema unos meses más tarde, encontré esta solución:
private void setOnClickListeners() { super.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { onClick(v); } }); for (int index = 0; index < super.getChildCount(); index++) { View view = super.getChildAt(index); view.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { onClick(v); } }); } } protected void onClick(View v) { // something to do here... }