2011-09-19 12 views
13

Tengo un problema que básicamente no sé cómo solucionarlo. Tengo un LinearLayout con algunos compenents niño en ella, como ImageView, Vista de Texto y así sucesivamente, un ejemplo se puede ver en el XML siguiente:Android: propagar el estado principal a la vista secundaria

<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 list_buttom_top estilo 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 content_page_large_text también dice que el color de 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 aún no ha trabajo también. Lo mismo ocurre con ImageView, que no obtiene su imagen original modificada cuando hago clic en LinearLayout.

Me estoy perdiendo algo aquí? Gracias por la atención T

Respuesta

0

Sería un problema más fácil realizar un seguimiento 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í he descubierto también recientemente que el androide: duplicateParentState = "true" no es la panacea que pensé que era.

En caso de que se agoten esas dos soluciones, entonces mi solución de acceso generalmente es un componente personalizado para el diseño de la raíz. http://developer.android.com/guide/topics/ui/custom-components.html Pero eso podría no ser necesario si la interfaz es así de simple. Estoy bastante seguro de que puedes hacer esto con StateListDrawable s.

componentes personalizados son generalmente más fáciles de tratar de encontrar la mágica combinación de variables XML, y hará que el diseño sea más comprensible/editar más adelante, si usted está pensando en hacer esto más complicado.

33

Creo que debe establecer android:addStatesFromChildren="true" en el diseño lineal, de esta manera el estado de los hijos se propaga al elemento primario.

Además, asegúrese de NO combinar esto con android:duplicateParentState="true" ya que provocará una excepción de desbordamiento de pila (básicamente haciendo un bucle infinito de referencia).

+5

Aunque no respondí completamente la pregunta, 'android: duplicateParentState =" true "' era exactamente lo que estaba buscando. – PureSpider

+0

gracias @SMR para la edición ... –

+0

Preguntó cómo propagar estados del padre al hijo. No de la otra manera. –

Cuestiones relacionadas