web-dev-qa-db-fra.com

Sélecteur textColor Android RadioButton

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 RadioButtons 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?

19
Axarydax

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 .

Lien source

Donc, dans l'ordre:

  1. state_selected n'est jamais vrai, car RadioButtons utilise state_checked lorsqu'il est coché.
  2. state_focused n'est jamais appelé car RadioButton ne recevra jamais le focus d'entrée.
  3. state_pressed devrait fonctionner. Lorsque vous maintenez votre doigt enfoncé, le texte n'apparaît pas.
  4. state_focused false et state_pressed false finissent par être default afin que vous voyiez du bleu.

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.

49
Grant Amos

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

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.

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>

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. 

3
Ramesh_D

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