Verwenden des Selektors zum Ändern der TextView-Textfarbe

Lesezeit: 5 Minuten

Ich versuche, eine TextView zu verwenden, um den Stil eines TabWidget auf einem Tabhost zu definieren.

Ich habe gerade einen Selektor für bgcolor erstellt und funktioniert gut, aber ich möchte einen Selektor für textColor erstellen, aber die Textfarbe ändert sich nicht:

Dies ist meine tab_text_selector.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
     <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" />

</selector>

Und dies ist der Code, wenn ich versuche, ihn für eine Textansicht zu verwenden:

TextView txtTab=new TextView(this);
        txtTab.setTextColor(R.drawable.tab_text_selector);
        txtTab.setBackgroundResource(R.drawable.tab_bg_selector);
        txtTab.setGravity(Gravity.CENTER);
        txtTab.setText("Agregar Idea");

Ich weiß, dass die Textfarbe auf jeden Fall weiß sein muss, aber das tut sie nicht.

Benutzer-Avatar
Sagar Schah

1) Verwenden Sie tab_text_selector.xml wie unten und legen Sie es in den Ordner res/color:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <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="#504f4f" /> <!-- default case -->
</selector>

Und stellen Sie es wie unten auf Ihre Textansicht ein.

TextView tv = (TextView) findViewById(R.id.TextView1) ;
tv.setTextColor(context.getResources().getColor(R.color.tab_text_selector));

2) Die zweite Option ist Wenn Sie Textview in XML verwenden, anstatt es programmgesteuert zu verwenden, verwenden Sie tab_text_selector.xml wie folgt:

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal"
    android:text="TextView"
    android:textColor="@‌​drawable/tab_text_sel‌​ector" />

  • android:textColor=”@drawable/tab_text_selector” um genau zu sein

    – BAZTE

    13. Mai 2013 um 14:11 Uhr

  • getColor funktioniert nicht – Sie müssen getColorStateList() verwenden, wie in der Antwort von @ffeandro erwähnt. Verifiziert am 4.4.2

    – Ben Clayton

    2. Juli 2014 um 17:08 Uhr

  • @BAZTED hast du es überhaupt versucht android:textColor="@drawable/tab_text_selector" Textfarbe ändern? Wenn Sie tatsächlich etwas Code machen, würden Sie das erkennen android:textColor="@color/tab_text_selector" ist eigentlich die richtige Antwort. Ich habe keine Ahnung, wie jemand Ihren Kommentar positiv bewerten würde, wenn er irreführend ist.

    – Andy

    13. August 2017 um 22:35 Uhr

  • @Andy Es kommt darauf an, wo du das hinstellst tab_text_selector.xml Datei. Meiner Erfahrung nach gehen diese in die res/drawable Ordner, aber diese Antwort sagt, dass ich es einfügen soll res/color was anscheinend funktioniert, aber etwas ungewöhnlich ist.

    – k2col

    19. Juli 2018 um 17:15 Uhr


Benutzer-Avatar
ffleandro

Sie müssen verwenden getColorStateList(). Und für XML siehe hier.

Ich hatte auch mit diesem Problem zu kämpfen. Wenn Sie möchten, verwenden Sie a state listmüssen Sie es in deklarieren color Ressourcenordner statt der drawable Ordner und verwenden Sie die setTextColor(getResources().getColorStateList(R.color.tab_text_selector)) Methode.

  • Ich ging voran und nahm eine Bearbeitung vor, um die XML-Version einzuschließen. Diese Antwort war die hilfreichste aller anderen Antworten zum Ändern der Textfarbe von a TextView basierend auf dem Selektorzustand. Sagen buchstäblich alle android:color in der ausziehbaren Auswahl. Ich frage mich, ob einer von ihnen es tatsächlich ausprobiert hat, bevor er geantwortet hat, weil er dachte, es sei richtig.

    – Andy

    13. August 2017 um 22:29 Uhr

Benutzer-Avatar
ρяσѕρєя K

Verwenden Sie diesen Weg:

tab_text_selector.xml:

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

Textübersicht:

TextView txtTab = new TextView(this);

XmlResourceParser xrp = getResources().getXml(R.drawable.tab_text_selector);  
try {  
    ColorStateList csl = ColorStateList.createFromXml(getResources(), xrp);  
    txtTab.setTextColor(csl);  
} catch (Exception e) {  } 

txtTab.setBackgroundResource(R.drawable.tab_bg_selector);
txtTab.setGravity(Gravity.CENTER);
txtTab.setText("Agregar Idea");

Aber es ist besser, Farbe einzusetzen /res/color/yourcolor.xml

  • Gibt es einen Grund, warum Sie die TextViews festlegen textColor programmatisch? Warum nicht einfach hinzufügen android:textColor="@drawable/tab_text_selector" zum Layout?

    – spaaarky21

    20. Juni 2013 um 20:02 Uhr

  • Android Studio (und ich nehme an, Eclipse) wird sich darüber beschweren, dass getXml() eine XML-Ressource erwartet, und einen roten Unterstreichungsfehler ausgeben, aber Sie können Ihre App trotzdem problemlos kompilieren und ausführen. Wenn Sie das stört, verschieben Sie die Selektor-XML-Datei von R.drawable oder R.color, wo immer Sie sie haben, nach R.xml, und Ihre IDE sollte aufhören, sich zu beschweren.

    – micnguyen

    26. November 2014 um 3:03 Uhr

Machen Sie einfach Selector für Textfarbe

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

Setzen Sie dann die Eigenschaft textColor von Textview und setzen Sie clickable=true

<TextView
    android:clickable="true"
    android:textColor="@drawable/text_selector"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/registration"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true" />

@ffleandro,@ρяσѕρєя K antwortet am besten, ich denke, die Verwendung von ColorStateList ist die beste Wahl für ältere und neueste Versionen von Android.

int[][] states = new int[][] {
    new int[] { android.R.attr.state_pressed}, // pressed
    new int[] { android.R.attr.state_focused}, // focused
    new int[] {}
};
int[] colors = new int[] {
    getResources().getColor(R.color.green_color), // green
    getResources().getColor(R.color.green_color), // green
    getResources().getColor(R.color.white)  // white
};
ColorStateList list = new ColorStateList(states, colors);
mTextView.setFocusable(true);
mTextView.setClickable(true);
mTextView.setTextColor(list);

Benutzer-Avatar
Shabbir Dhangot

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

Benutzer-Avatar
snapix

Hier ist eine Referenz zu Android-Entwicklern
http://developer.android.com/guide/topics/resources/color-list-resource.html

  • Während Sie nichts erklären, ist der Link äußerst hilfreich.

    – SMBiggs

    30. Mai 2016 um 19:58 Uhr

1130270cookie-checkVerwenden des Selektors zum Ändern der TextView-Textfarbe

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy