Ich habe einen Selektor für textColor
eines RadioButton
wie folgt:
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:state_selected="true" Android:color="#fff"/>
<item Android:state_focused="true" Android:color="#f00"/>
<item Android:state_pressed="true" Android:color="#0f0"/>
<item Android:state_focused="false" Android:state_pressed="false" Android:color="#00f"/>
</selector>
Ich habe erwartet, dass das ausgewählte RadioButton
eine andere Farbe als die anderen haben wird.
Alle RadioButton
s haben jedoch einen blauen Text (mit Android: state_focused = "false" Android: state_pressed = "false"), auch der ausgewählte.
Was mache ich falsch?
Es sieht so aus, als würden Sie nur die falschen Selektoren verwenden. Die Dokumente beschreiben die Auswahl wie folgt:
Bei jeder Statusänderung wird die Statusliste von oben nach unten durchlaufen und das erste Element, das dem aktuellen Status entspricht, wird verwendet. Die Auswahl basiert nicht auf der "besten Übereinstimmung", sondern einfach dem ersten Element, das die Mindestkriterien des Status erfüllt .
Also in der Reihenfolge:
Wenn Sie verschiedene Zustände sehen möchten, probieren Sie diese aus:
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:state_pressed="true" Android:color="#0f0"/>
<item Android:state_checked="true" Android:color="#fff"/>
<item Android:color="#00f"/>
</selector>
Ich habe das obige getestet und sehe, dass alle Farben entsprechend dargestellt werden.
Laut Android. https://developer.Android.com/guide/topics/resources/color-list-resource.html . https://developer.Android.com/reference/Android/ content/res/ColorStateList.html
Sie müssen einen Ordner mit dem Namen 'color' im 'res' -Verzeichnis erstellen und eine neue Datei mit dem Namen radiobuttonstate.xml erstellen, die beispielsweise so aussieht.
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:state_focused="true"
Android:color="YOUR COLOR" />
<item
Android:state_pressed="true"
Android:state_enabled="false"
Android:color="YOUR COLOR" />
<item Android:color="YOUR COLOR"
Android:state_checked="true"/>
<item
Android:state_enabled="false"
Android:color="YOUR COLOR" />
<item Android:color="YOUR COLOR" />
definieren Sie dann in Ihrem Optionsfeld im Android: textColor-Attribut Ihre zuvor definierte Farbliste.
<RadioButton
Android:id="@+id/radio_H"
Android:layout_width="30dp"
Android:layout_height="30dp"
Android:text="@string/string_example"
Android:textColor="@color/radiobuttonstate"
Android:textAlignment="center" />
Die Antwort von @GrantAmos ist perfekt und funktioniert. Wenn Sie die Farbauswahl über XML senden möchten, verwenden Sie diesen Code.
Android:textColor="@color/textview_selector"
Wenn Sie den Selektor programmgesteuert einstellen möchten, verwenden Sie diesen Code -
radioButton.setTextColor(ContextCompat.getColorStateList(getContext(), R.color.textview_selector));
Hoffe, es wird jemandes Zeit sparen.
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:state_checked="false" Android:drawable="@color/dark_grey"/>
<item Android:state_checked="true" Android:drawable="@color/topic_green"/>
</selector>
Dieser arbeitet für mich. Eigentlich, wenn ich Android verwende: color = "@ color/dark_grey". Es hat nicht funktioniert. Aber als ich zu Drawable wechselte, tat es das.
Verwenden Sie die geprüfte Eigenschaft für das Optionsfeld.
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:state_pressed="true" Android:color="#0f0"/>
<item Android:state_checked="true" Android:color="#fff"/>
<item Android:color="#00f"/>
</selector>