Android: Propaga el estado padre a la vista secundaria

Estoy experimentando algún problema que básicamente no sé cómo arreglar. Tengo un LinearLayout con algunos compenents niño en él, como ImageView, TextView y así sucesivamente, un ejemplo se puede ver en el xml abajo:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" style="@style/list_buttom_top"> <LinearLayout android:gravity="center_vertical" android:paddingLeft="10dip" android:orientation="vertical" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1.0"> <TextView android:text="title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/title" style="@style/content_page_large_text" /> <TextView android:text="summary" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/subtitle" android:visibility="visible" style="@style/content_page_small_text" /> </LinearLayout> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/itemCount" android:visibility="gone" style="@style/content_page_large_count_text" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/chevron" style="@style/list_buttom_chevron" /> </LinearLayout> 

El estilo list_buttom_top dice que cuando el LinearLayout está en el estado presionado, el color de fondo necesita ser cambiado, y hasta ahora esto está funcionando. El problema es que el content_page_large_text también dice que el color del texto de TextView necesita ser cambiado también, pero no sucede. El único color que cambia cuando hago clic en LinearLayout es su fondo.

 <style name="list_buttom_top"> <item name="android:clickable">true</item> <item name="android:paddingTop">10dip</item> <item name="android:paddingBottom">10dip</item> <item name="android:paddingLeft">10dip</item> <item name="android:paddingRight">10dip</item> <item name="android:gravity">center_vertical</item> <item name="android:background">@drawable/background_view_rounded_top</item> </style> <style name="list_buttom_chevron"> <item name="android:paddingLeft">4.0dip</item> <item name="android:paddingTop">2.0dip</item> <item name="android:paddingRight">4.0dip</item> <item name="android:paddingBottom">2.0dip</item> <item name="android:layout_width">wrap_content</item> <item name="android:layout_height">wrap_content</item> <item name="android:src">@drawable/chevron</item> </style> 

He intentado usar este androide: duplicateParentState = "true" en mis TextViews pero también no trabajó. Lo mismo ocurre con ImageView, que no obtiene su imagen de origen cambiada cuando hago clic en LinearLayout.

¿Me estoy perdiendo de algo? Gracias por la atención T

Sería un tema más fácil de rastrear si pudiéramos ver su estilo content_page_large_text. Además, no veo cómo estás configurando el color, ¿es tu background_view_rounded_top un elemento <selector> o lo estás configurando en un listener en la actividad?

Pero sí también recientemente descubrió que android: duplicateParentState = "true" no es la panacea que pensé que era.

Si estas dos soluciones se agotan, entonces mi solución go-to suele ser un componente personalizado para el diseño raíz. http://developer.android.com/guide/topics/ui/custom-components.html Pero eso no podría ser necesario si la interfaz es tan simple. Estoy bastante seguro de que puede hacer esto con StateListDrawable s.

Los componentes personalizados suelen ser más fáciles que tratar de encontrar la combinación mágica de las variables xml, y hará que el diseño sea más comprensible / editable más tarde si está planeando hacer esto más complicado.

Creo que deberías establecer el android:addStatesFromChildren="true" en el diseño lineal, de esta manera el estado de los niños se propaga al padre.

Además, asegúrese de no combinar esto con android:duplicateParentState="true" ya que causará una excepción de desbordamiento de la pila (básicamente, causando un bucle de referencia infinita).

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.