2012-11-22 7 views
8

Es gibt ein TextView in jedem ListView-Element, das ich über benutzerdefinierten Adapter einstelle. Das TextView-XML befindet sich nicht in der gleichen Datei, in der ein ListView-XML geschrieben wurde. Ich möchte, dass sich die Schriftartfarbe eines bestimmten Elements ändert, wenn ein Element von ListView ausgewählt wird. Ich versuchte es auch, indem ich die verschiedenen Zustände von TextView definierte, d. H. Ausgewählt, fokussiert und gedrückt, aber diese Dosis löste mein Problem nicht. Bitte schlagen Sie mir einige Lösungen vor. Hier ist Schnipsel ..Ändern Sie die Schriftfarbe von TextView, wenn ListView Item ausgewählt wird

ein listeview in einer XML-Datei für zB. file1.xml

<ListView 
    android:id="@+id/listView1" 
    android:layout_width="0dp" 
    android:layout_height="fill_parent" 
    android:layout_weight="0.5" 
    android:clickable="true" /> 

und ein Textview in verschiedenen XML .. d.h file2.xml

<TextView 
    android:id="@+id/rowListTextView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:paddingBottom="10dp" 
    android:paddingLeft="10dp" 
    android:paddingTop="10dp" 
    android:text="@string/app_name" 
    android:textColor="@color/file3" 
    android:textSize="10sp" 
    android:textStyle="bold" /> 

Datei für Textfarbe Attribut in res/Farbe Ordner d.h file3.xml.

<item android:state_selected="true" android:color="@android:color/white"/> 
<item android:state_focused="true" android:color="@android:color/white"/> 
<item android:state_pressed="true" android:color="@android:color/white"/> 
<item android:color="@android:color/black"/> 

+0

Die Antwort von tearapap ist die beste Antwort - ich denke, es muss akzeptiert werden. – AndrewS

Antwort

8

Below-Schnipsel wird Ihnen helfen.

Ich habe kein Szenario wie das Speichern von Textfarbe beim Scrollen der Liste und das ausgewählte Element wird nicht in den Fokus genommen. Dieser Ausschnitt führt Sie in die richtige Richtung.

+1

Danke vipul Ich probierte das und es half irgendwo als die sich ändernde Schriftfarbe des bestimmten Artikels, wo es angeklickt wurde, aber jetzt möchte ich, dass es die ursprüngliche Farbe behalten sollte, sobald das angeklickte von dieser bestimmten Position weg ist. Kannst du mir auf diese Weise helfen? Vielen Dank. –

+0

Ich habe das gleiche Problem. –

+1

Und wie man die TextView-Farbe ohne Klick ändert, zum Beispiel wenn das ListView erstellt wird. – Naskov

22

Probieren Sie diese Farbstatusliste für textColor aus.

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" android:color="#fff"/> 
    <item android:state_activated="true" android:color="#fff"/> 
    <item android:color="#000" /> 
</selector> 

Android guide nicht erwähnt state_activated Attribut, aber es funktioniert für mich.

+1

das ist die richtige antwort – AndrewS

+0

'android: state_activated' ist definitiv was du willst. Warum dieses Ish nicht dokumentiert ist, ist verrückt. Ich habe ungefähr 30 Minuten damit verbracht, dies zur Arbeit zu bringen, dann habe ich das versucht und es funktioniert. –

+0

Ist dies auch für Bilder möglich, ich möchte zwischen zwei Bildern wechseln, ich habe versucht, anstelle von Android: Farbe zu Android: src für das Bild, aber Fehler mich – Lion789

14

In Selektor:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_activated="true" android:color="#ff0000" /> 
    <item android:state_active="true" android:color="#ff0000" /> 
    <item android:state_pressed="true" android:color="#ff0000" /> 
    <item android:state_selected="true" android:color="#ff0000" /> 
    <item android:state_focused="true" android:color="#ff0000" /> 
    <item android:color="#000000" /> 
</selector> 

In Aktivität: myListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);

public void onItemClick(AdapterView<?> parent, View view, 
         int position, long id) { 
        pl=position; 
        myListView.setItemChecked(pl, true); 
        adapter.notifyDataSetChanged(); 
          ..... 

item.xml:

<?xml version="1.0" encoding="utf-8"?> 
    <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/textAppearanceListItemSmall" 
    android:gravity="center_vertical" 
    android:textColor="@drawable/selector" 
    android:minHeight="?android:attr/listPreferredItemHeightSmall" 
    /> 

Und mein aufgegebenes Element in der roten Farbe, nachdem ich sie klicken. Nur ein überprüfter Artikel. Genießen!

+0

es funktioniert gut. Gut gemacht!! +1. Danke :) – jagdish

+0

toller Code !! + 1 :))) –

+0

im Fall der Elementauswahl in Listview, sollte diese Antwort akzeptiert werden. Schöne Antwort @Master, eigentlich. –

Verwandte Themen