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:
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.
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.
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.
@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);