2011-12-15 23 views
7

Tengo que hacer otro color de resaltado para el elemento ListView. Yo uso adaptador personalizado para los artículos, y he siguiente código:¿Cómo establecer el color de resaltado para el elemento ListView?

Diseño:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#FFFFFF" 
    android:weightSum="1.0" 
    android:orientation="vertical" > 

    <LinearLayout 
     android:id="@+id/linearLayout1" 
     android:layout_width="fill_parent" 
     android:layout_weight="0.13" 
     android:background="@drawable/booklist_header" 
     android:orientation="horizontal" 
     android:layout_height="0dp" > 

     <ImageView 
      android:id="@+id/imageViewBookListBack" 
      android:layout_width="wrap_content" 
      android:layout_gravity="center" 
      android:layout_height="wrap_content" 
      android:src="@drawable/back_button" /> 

    </LinearLayout> 

    <LinearLayout 
     android:id="@+id/linearLayout2" 
     android:layout_width="fill_parent" 
     android:layout_weight="0.77" 
     android:layout_height="0dp" > 

     <ListView 
      android:id="@+id/listViewCurrentList" 
      android:listSelector="@drawable/selector" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent"> 
     </ListView> 

    </LinearLayout> 

    <LinearLayout 
     android:id="@+id/linearLayoutBooklistAdwhirl" 
     android:layout_width="fill_parent" 
     android:layout_weight="0.1" 
     android:layout_height="0dp" > 
    </LinearLayout> 

</LinearLayout> 

Código para la disposición de material:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#FFFFFF" 
    android:orientation="horizontal" > 

    <ImageView 
     android:id="@+id/imageViewBookListItemImage" 
     android:layout_width="120dp" 
     android:layout_marginTop="15dp" 
     android:layout_height="120dp" /> 

    <LinearLayout 
     android:id="@+id/linearLayout1" 
     android:layout_width="wrap_content" 
     android:layout_height="135dp" 
     android:layout_marginTop="15dp" 
     android:orientation="vertical" > 

     <TextView 
      android:id="@+id/textViewBookListItemTitle" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Medium Text" 
      android:textColor="#000000" 
      android:textStyle="bold" 
      android:textAppearance="?android:attr/textAppearanceMedium" /> 

     <TextView 
      android:id="@+id/textViewBookListItemAuthor" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Medium Text" 
      android:textColor="#000000" 
      android:textAppearance="?android:attr/textAppearanceMedium" /> 

    </LinearLayout> 

</LinearLayout> 

Código de selector:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_focused="true" android:drawable="@color/green" /> <!-- focused --> 
    <item android:state_focused="true" android:state_pressed="true" android:drawable="@color/green" /> <!-- focused and pressed--> 
    <item android:state_pressed="true" android:drawable="@color/green" /> <!-- pressed --> 
    <item android:drawable="@color/green" /> <!-- default --> 
</selector> 

Código para color.xml:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <color name="green">#006400</color> 
    <color name="white">#FFFFFF</color> 


</resources> 

Pero tengo un problema: el elemento ListView no cambia de color con un clic. Tiene color blanco siempre ¿Dónde he cometido un error?

Respuesta

23

Así es como se hace:

En primer lugar, en su ListView, colocamos los siguientes:

android:listSelector="#00000000" 

Esto hace que su listSelector (el color que normalmente se ve cuando hace clic en la vista de lista) transparente.

A continuación, establezca la LinearLayout de su diseño a este tema:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@drawable/selector" 
    android:orientation="horizontal" > 

que tenían el mismo problema hace unos días y me tomó años para resolver esto. ¡Esperemos que funcione para usted!

+1

Muchas gracias !!! – user1078760

+4

Hay dos líneas que contienen 'android: fondo. Por favor corrige –

2

Puede intentar agregar esto: android: drawSelectorOnTop = "true" a la definición de ListView.

Espero que esto te ayude!

P.S. Puede optimizar su diseño principal y eliminar los diseños innecesarios. Puedes usar layoutopt para esto.

+0

Gracias. Pero ahora, cuando hago clic en el elemento, todo el ListView cambia de color para verde, pero solo necesito 1 elemento. ¿Cómo puedo arreglarlo? – user1078760

+0

Hmm, para este problema, puede consultar aquí una solución: http://stackoverflow.com/questions/2562051/listview-item-background-via-custom-selector. También verificaré y le responderé lo antes posible. –

Cuestiones relacionadas