J'ai un sélecteur pour textColor
d'une RadioButton
comme ceci:
<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>
Je m'attendais à ce que celui sélectionné RadioButton
ait une couleur différente de celle des autres.
Cependant, tous les RadioButton
s ont un texte bleu (avec Android: state_focused = "false" Android: state_pressed = "false"), même celui sélectionné.
Qu'est-ce que je fais mal?
Il semble que vous n'utilisiez que les mauvais sélecteurs. La documentation décrit la sélection comme suit:
Lors de chaque changement d'état, la liste d'états est parcourue de haut en bas et le premier élément correspondant à l'état actuel est utilisé - la sélection n'est pas basée sur la "meilleure correspondance", mais simplement sur le premier élément répondant aux critères minimums de l'état .
Donc, dans l'ordre:
Si vous souhaitez voir différents états, essayez ceux-ci:
<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>
J'ai testé ce qui précède et je peux voir que toutes les couleurs sont exprimées correctement.
Selon Android. https://developer.Android.com/guide/topics/resources/color-list-resource.html . https://developer.Android.com/reference/Android/ content/res/ColorStateList.html
Vous devez créer un dossier appelé 'color' dans le répertoire 'res' et créer un nouveau fichier appelé radiobuttonstate.xml, par exemple, qui ressemble à ceci.
<?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" />
puis, dans votre bouton radio, définissez dans l’attribut Android: textColor votre liste de couleurs que vous avez définie précédemment.
<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" />
La réponse fournie par @GrantAmos est parfaite et fonctionne bien. Si vous souhaitez utiliser le sélecteur de couleur de texte via XML, utilisez ce code.
Android:textColor="@color/textview_selector"
Toutefois, si vous souhaitez définir le sélecteur par programme, utilisez ce code -
radioButton.setTextColor(ContextCompat.getColorStateList(getContext(), R.color.textview_selector));
J'espère que cela sauvera du temps à quelqu'un.
<?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>
Celui-ci fonctionne pour moi. En fait, quand j'utilise Android: color = "@ color/dark_grey". Ça n'a pas marché. Mais quand j'ai changé pour drawable, il l'a fait.
Utilisez la propriété cochée pour le bouton radio.
<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>