Die Farbe der Android-Textansicht ändert sich nicht, wenn sie deaktiviert ist

70

Wenn ich setEnabled(false)nach einem TextViewObjekt rufe, ändert sich die Textfarbe nicht. Ich habe erwartet, dass es in grau geändert wird. Wenn ich die Zeile android:textColorin meiner XML-Datei entferne , wird sie wieder normal.

Irgendwelche Ideen ?

dsh
quelle
Sie müssen die Textfarbe manuell auf die gewünschten Werte einstellen. Zumindest musste ich das tun.
MattC
Hier ist die Lösung: D stackoverflow.com/questions/4692642/…
cesards

Antworten:

157

Ich denke, was passiert, ist, dass Sie die anderen Textfarbenstile nicht erben, da Sie die Standardtextfarbe überschreiben. Versuchen Sie, eine ColorStateList dafür zu erstellen und das textColor-Attribut anstelle einer Farbe festzulegen.

In einer Farbdatei (z. B. res / color / example.xml):

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="false" android:color="@color/disabled_color" />
    <item android:color="@color/normal_color"/>
</selector>

dann in Ihrem Layout:

<TextView
    android:text="whatever text you want"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textColor="@color/example" />

Beachten Sie, dass ich dies seit einiger Zeit nicht mehr getan habe und viel davon aus dem Speicher schreibe, sodass möglicherweise einige Anpassungen erforderlich sind. Die ColorStateList-Dokumente (oben verlinkt) enthalten ein ausführlicheres Beispiel für die Farb-XML-Datei.

Jeremy Logan
quelle
1
Vielen Dank! Sehr praktisch, um es an einem Ort zu haben. Nur eine Randnotiz. Anstelle des Ordners "Farbe" (der beispielsweise für 2.1 nicht Standard ist) können Sie ihn in den Ordner "xml" legen und als "@ xml / example" verwenden. Funktioniert auch gut von styles.xml!
halxinate
2
Gibt es eine Möglichkeit, die Farbe von deaktiviertem Text programmgesteuert abzurufen?
Android-Entwickler