webentwicklung-frage-antwort-db.com.de

Android RadioButton TextFarbauswahl

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 RadioButtons haben jedoch einen blauen Text (mit Android: state_focused = "false" Android: state_pressed = "false"), auch der ausgewählte. 

Was mache ich falsch?

19
Axarydax

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 .

Quelllink

Also in der Reihenfolge:

  1. state_selected ist niemals wahr, da RadioButtons state_checked verwendet, wenn es markiert ist.
  2. state_focused wird nie aufgerufen, da RadioButton niemals den Eingabefokus erhält.
  3. state_pressed sollte funktionieren. Wenn Sie den Finger nach unten drücken, wird der Text nicht angezeigt.
  4. state_focused false und state_pressed false sind __. default. Sie sehen also blau.

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.

49
Grant Amos

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" />
9
Isaias Carrera

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.

8
Rohan Kandwal
    <?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. 

3
Ramesh_D

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>
0
user3636378