2011-08-23 8 views
4

J'ai un ListView personnalisé que chaque rangée de la liste est composée par ImageView et deux TextView. Je veux changer la couleur du texte en blanc quand l'article d'une liste est cliqué (seulement dans l'article cliqué). Aussi, je veux changer la couleur au noir quand l'article est "décoché" (quand le "presse" est libéré). Je l'ai déjà fait la couleur de fond de l'élément de changement quand il a été cliqué avec le list_item_bg.xml suivant:Changer la couleur du texte de ListView sur le clic

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item 
    android:state_selected="false" 
    android:state_pressed="false" 
    android:drawable="@color/white" /> 

<item android:state_pressed="true" 
    android:drawable="@color/red_destaques" /> 

<item android:state_selected="true" 
    android:drawable="@color/red_destaques" /> 
</selector> 

Et le listitem_row.xml:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    android:id="@+id/relativeLayout1" 
    android:layout_width="fill_parent" 
    android:layout_height="50dip" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:padding="5dip" 
    android:maxHeight="50dip" 
    android:adjustViewBounds="true" 
    android:background="@color/list_item_bg"> 

    <ImageView 
     android:layout_width="70dip" 
     android:layout_height="wrap_content" 
     android:layout_centerVertical="true" 
     android:adjustViewBounds="true" 
     android:scaleType="fitStart" 
     android:src="@drawable/imagem_padrao_lista" 
     android:id="@+id/listItemLogo"> 
    </ImageView> 

    <TextView 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:layout_height="wrap_content" 
     android:text="TextView" 
     android:layout_width="wrap_content" 
     android:layout_toRightOf="@+id/listItemLogo" 
     android:layout_toLeftOf="@+id/listItemArrow" 
     android:textColor="#000000" 
     android:layout_marginLeft="5dip" 
     android:adjustViewBounds="true" 
     android:id="@+id/listItemTitle"> 
    </TextView> 

    <TextView 
     android:layout_height="wrap_content" 
     android:text="TextView" 
     android:layout_width="wrap_content" 
     android:layout_toRightOf="@+id/listItemLogo" 
     android:layout_below="@+id/listItemTitle" 
     android:textColor="#333333" 
     android:layout_marginLeft="5dip" 
     android:adjustViewBounds="true" 
     android:id="@+id/listItemDescription"> 
    </TextView> 
    <ImageView android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_alignParentRight="true" android:src="@drawable/setinha_navegacao" android:layout_centerVertical="true" android:id="@+id/listItemArrow"></ImageView> 

</RelativeLayout> 

I le texte pour changer sa couleur exactement de la même manière que l'arrière-plan changements comme indiqué dans les xml ci-dessus. Je préfèrerais faire ce changement par code si possible ...

Répondre

19

Créez un StateListDrawable comme vous le faisiez auparavant mais avec le noir comme couleur par défaut et blanc lorsqu'il est pressé.

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_selected="true" android:color="@color/black" /> 
<item android:state_focused="true" android:color="@color/black" /> 
<item android:state_pressed="true" android:color="@color/black" /> 
<item android:color="@color/white" /> 
</selector> 

maintenant dans la TextView changer la couleur du texte à la nouvelle drawable:

android:textColor="@color/list_item_text" 

Plus sur StateListDrawables: http://developer.android.com/guide/topics/resources/drawable-resource.html#StateList

+0

ne fonctionne pas = /. Je reçois juste un ANR quand l'application est sur le point de charger le 'ListView'. J'ai même essayé de définir la couleur du texte comme 'android: textColor =" @ color/list_item_bg "', car ce xml fonctionne bien, et j'ai quand même le message d'erreur =/ – Alesqui

+1

Essayez celui-ci. J'ai ajouté un cas pour concentré. –

+1

Maintenant ça marche parfaitement mec! Merci beaucoup! Je pensais que cela changerait seulement la couleur quand le 'TextView' serait touché, mais il a changé quand n'importe quel endroit de la rangée a été pressé (exactement comme je m'attendais). Connaissez-vous un lien qui décrit mieux la façon dont le '' se comporte? Je n'ai trouvé que des explications superficielles ... – Alesqui

Questions connexes