web-dev-qa-db-fra.com

changer la couleur du texte du bouton quand on appuie dessus

J'ai rendu mon bouton transparent et j'aimerais donc que la couleur du texte du bouton change lorsque vous appuyez sur le bouton. Est-il possible de faire cela en utilisant uniquement des fichiers XML? 

12
skinnybrit51

Voir la section intitulée State List dans cette partie de la documentation ... Ressources pouvant être dessinées .

Vous pouvez définir deux fichiers Button xml différents, l'un pour l'état "par défaut" transparent et l'autre avec le bouton en rouge pour l'état "enfoncé". Vous définissez ensuite une selector qui permute les ressources pouvant être extraites dans les différents états.

EDIT: Selon le commentaire de devunwired, la ressource Color State List (Liste des états de couleur) est probablement plus appropriée pour changer simplement de couleur que pour le dessin proprement dit.

9
Squonk

Oui, vous pouvez le faire comme ça:

layout/main_layout.xml:

.....
    <Button
      Android:id="@+id/button"
      Android:layout_width="wrap_content"
      Android:layout_height="wrap_content"
      Android:text="bonjour !"
      Android:textColor="@color/button_text_color"
    />
.....

color/button_text_color.xml:

   <selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
     <item Android:color="#c0c0c0" Android:state_pressed="true"/>
     <item Android:color="#ffffff"/>
   </selector>
36
damson

J'aime la solution proposée par Konstantin Burov dans l'autre numéro: Bouton personnalisé Android; changer la couleur du texte

Vous pouvez réellement gérer plus d’états que simplement pressés et normaux. Mais cela devrait résoudre le problème. 

<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<!-- Focused and not pressed -->
<item Android:state_focused="true" 
      Android:state_pressed="false" 
      Android:color="#ffffff" />

<!-- Focused and pressed -->
<item Android:state_focused="true" 
      Android:state_pressed="true" 
      Android:color="#000000" />

<!-- Unfocused and pressed -->
<item Android:state_focused="false" 
      Android:state_pressed="true" 
      Android:color="#000000" />

<!-- Default color -->
<item Android:color="#ffffff" />
</selector>

Vous pouvez ensuite utiliser ce sélecteur pouvant être dessiné dans votre bouton pour modifier l’attribut de couleur du texte comme ci-dessous. Notez que le sélecteur dans l'exemple ci-dessous s'appelle "button_text_color"

Android: textColor = "@ drawable/button_text_color"

En utilisant la même approche, vous pouvez également résoudre la couleur de fond du bouton. N'oubliez pas que dans le sélecteur, au lieu d'utiliser l'attribut "Android: color", vous devez utiliser l'attribut "Android: drawable" comme ci-dessous. 

<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<!-- Focused and not pressed -->
<item Android:state_focused="true" 
      Android:state_pressed="false" 
      Android:drawable="#ffffff" />

<!-- Focused and pressed -->
<item Android:state_focused="true" 
      Android:state_pressed="true" 
      Android:drawable="#000000" />

<!-- Unfocused and pressed -->
<item Android:state_focused="false" 
      Android:state_pressed="true" 
      Android:drawable="#000000" />

<!-- Default color -->
<item Android:drawable="#ffffff" />
</selector>

Et puis dans le bouton lui-même, notez que cette fois le nom du sélecteur est "button_background" 

Android: background = "@ drawable/button_background"

Vous devez définir @drawable ressource xml dans textColor attributte

Voici un exemple: Bouton personnalisé Android; changer la couleur du texte

1
Alexey Vishnyakov

Vous devez le faire dans votre code. Essaye ça:

    mBtn = ((Button) findViewById( R.id.button1 ));
    mBtn.setOnClickListener( new OnClickListener() {

        @Override
        public void onClick(View v) {
            mBtn.setTextColor( Color.RED );
        }
    });

Déclarer:

private Button mBtn;
1
user1204391