Ich versuche, die Hintergrundfarbe eines Android- TextView
Widgets zu ändern, wenn der Benutzer es berührt. Zu diesem Zweck habe ich einen Selektor erstellt, der in gespeichert ist res/color/selector.xml
und ungefähr so aussieht:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_pressed="true"
android:color="@color/semitransparent_white"
/>
<item
android:color="@color/transparent"
/>
</selector>
Das clickable
Attribut von TextView
ist true
, falls das von Interesse ist.
Als ich diesen auf ein zuweisen TextView
wie android:background="@color/selector"
, ich erhalte die folgende Ausnahme zur Laufzeit:
ERROR / AndroidRuntime (13130): Auslöser: org.xmlpull.v1.XmlPullParserException: Binäre XML-Dateizeile Nr. 6: Tag erfordert ein 'drawable'-Attribut oder ein untergeordnetes Tag, das ein Drawable definiert
Wenn ich das Attribut in "Zeichenbar" ändere, funktioniert es, aber das Ergebnis sieht völlig falsch aus, da die IDs als Bildreferenzen anstelle von Farbreferenzen interpretiert werden (wie das "Zeichenbar" nahe legt).
Was mich verwirrt ist, dass ich eine Farbreferenz, z. B. "@ color / black", direkt als Hintergrundattribut festlegen kann. Dies funktioniert wie erwartet. Die Verwendung von Selektoren funktioniert nicht.
Ich kann den Selektor auch textColor
ohne Probleme als Selektor verwenden.
Was ist der richtige Weg, um einen Hintergrundfarbwähler auf einen TextView
in Android anzuwenden ?
Antworten:
Das Problem hierbei ist, dass Sie die Hintergrundfarbe nicht mit einem Farbwähler definieren können, sondern einen zeichnbaren Selektor benötigen . Die notwendigen Änderungen würden also so aussehen:
Sie müssten diese Ressource auch in das
drawable
Verzeichnis verschieben, in dem dies sinnvoller wäre, da es sich nicht um eine Farbauswahl an sich handelt.Dann müssten Sie die
res/drawable/selected_state.xml
Datei folgendermaßen erstellen :und schließlich würden Sie es so verwenden:
Hinweis : Der Grund, warum das OP eine Bildressource gezeichnet hat, ist wahrscheinlich, dass er versucht hat, nur auf seine Ressource zu verweisen, die sich noch im Farbverzeichnis befindet, diese jedoch verwendet hat,
@drawable
sodass er eine ID-Kollision hatte und die falsche Ressource auswählte.Ich hoffe, dies kann noch jemandem helfen, auch wenn das OP sein Problem wahrscheinlich inzwischen gelöst hat.
quelle
Die Lösung von Benoit funktioniert, aber Sie müssen wirklich keinen Aufwand verursachen, um eine Form zu zeichnen. Da Farben zeichnbar sein können, definieren Sie einfach eine Farbe in einer Datei /res/values/colors.xml:
Und dann als solches in Ihrem Selektor verwenden:
quelle
Eine noch einfachere Lösung für das oben Gesagte:
Speichern Sie das im Zeichenordner und los geht's.
quelle
<item android:state_pressed="true" android:color="@color/vantablack"/>
sieht semantisch identisch aus<item android:state_pressed="true"><color android:color="@color/vantablack"/></item>
Auch das funktioniert.
Ich
android:drawable
habe jedem Element das Attribut hinzugefügt , und ihre Werte sind Farben.Übrigens, warum sagen sie, dass dies
color
eines der Attribute von istselector
? Sie schreiben nicht, dassandroid:drawable
erforderlich ist.Ressource für Farbstatusliste
quelle
Für diejenigen, die dies tun möchten, ohne einen Hintergrundsektor zu erstellen, fügen Sie einfach diese Zeilen hinzu
TextView
Auch um es auswählbar zu machen, verwenden Sie:
quelle