2011-03-16 13 views
12

Tengo un ListFragment configurado con algunas selecciones que abren Fragments nuevos. Una parte de mí quiere hacer que cada elemento de ListFragment (tengo alrededor de 6) tenga un conjunto de colores diferente para cuando se selecciona y llamo a getListView().setItemChecked(index, true); ¿Es posible establecer diferentes fondos o todos tienen que ser iguales? ? Gracias.ListFragment Item Selected Background

Respuesta

31

Sí, puede hacer que usen un fondo diferente. Para cada uno de ellos, deberá compilar un StateListDrawable que seleccione el fondo deseado en función del estado del elemento.

Si nos fijamos en la demo fragmento de diseño, los elementos de la lista usar la disposición:

setListAdapter(new ArrayAdapter<String>(getActivity(), 
     android.R.layout.simple_list_item_activated_1, Shakespeare.TITLES)); 

Esa disposición es:

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/text1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:gravity="center_vertical" 
    android:background="?android:attr/activatedBackgroundIndicator" 
    android:minHeight="?android:attr/listPreferredItemHeight" 
/> 

Y el androide: Fondo están estableciendo aquí se reduce a (para el tema no holo oscuro):

<selector xmlns:android="http://schemas.android.com/apk/res/android" 
     android:exitFadeDuration="@android:integer/config_mediumAnimTime"> 
    <item android:state_activated="true" 
      android:drawable="@android:drawable/list_selector_background_selected" /> 
    <item android:drawable="@color/transparent" /> 
</selector> 

Así que acaba de escribir sus propios dibujables que utilizan diferentes para dibujables su estado activado.

(Nota: supongo que está trabajando con Honeycomb donde se introdujo el estado activado. Para las versiones de plataforma anteriores, esto no es tan limpio, pero no demasiado - necesita escribir una subclase de diseño que implemente Checkable y cambie su fondo basado en el estado verificado.)

+0

¿qué pasa con el color del texto? ¿Puedo usar la misma técnica? – aromero

+3

Sí, aunque tendrá que ser un recurso de color que cambie. – hackbod