2011-01-14 8 views
205

J'ai fait un bouton qui change la drawable de fond sur les différents états, de cette façon:Bouton personnalisé Android; changer la couleur du texte

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_pressed="true" android:drawable="@drawable/btn_location_pressed" /> <!-- pressed --> 
<item android:state_focused="true" android:drawable="@drawable/btn_location_pressed"/> <!-- focused --> 
<item android:drawable="@drawable/btn_location"/> <!-- default --> 

Le problème ici est que j'essaie aussi de changer le textColor comme je le fais avec le drawable mais je ne peux pas. J'ai déjà essayé android: textColor et android: couleur mais le premier ne fonctionne pas tandis que les secondes changent mon arrière-plan.

Le code suivant fait partie de ma mise en page. En ce qui concerne la couleur du texte, il ne fonctionne que pour la couleur du texte de l'état normal, ce qui ne change pas à celui pressé en

<Button android:id="@+id/location_name" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:paddingTop="5dp" 
     android:background="@drawable/location"   
     android:textSize="15sp" 
     android:textColor="@color/location_color" 
     android:textColorHighlight="#FFFFFF" 
    /> 

blanc Quelqu'un at-il la moindre idée?

Répondre

497

Créer une couleur stateful pour votre bouton, comme vous l'avez fait pour le fond, par exemple:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_focused="true" android:state_pressed="false" android:color="#ffffff" /> 
    <item android:state_focused="true" android:state_pressed="true" android:color="#000000" /> 
    <item android:state_focused="false" android:state_pressed="true" android:color="#000000" /> 
    <item android:color="#ffffff" /> 
</selector> 

Placez le xml dans un fichier au res/drawable dossier à savoir res/drawable/button_text_color.xml. Ensuite, il suffit régler la drawable comme la couleur du texte:

android:textColor="@drawable/button_text_color" 
+13

Notez que (pour moi, au moins) il y a un bug où l'état "normal" ( dans votre réponse) doit être placé à la fin du fichier comme dans votre réponse. Le fait de placer l'état normal en haut du fichier (au-dessus des autres états) empêche le fonctionnement du sélecteur. –

+51

ce n'est pas un bug. C'est la façon dont la sélection de l'état est supposée fonctionner. Ce n'est pas un _best match_, à la place, le premier qui correspond va le faire. – superjos

+0

Comment faire avec une valeur entière? J'essaie de faire quelque chose de similaire avec le remplissage de texte. – elimirks

14

Une autre façon de le faire est dans votre classe:

import android.graphics.Color; // add to top of class 

Button btn = (Button)findViewById(R.id.btn); 

// set button text colour to be blue 
btn.setTextColor(Color.parseColor("blue")); 

// set button text colour to be red 
btn.setTextColor(Color.parseColor("#FF0000")); 

// set button text color to be a color from your resources (could be strings.xml) 
btn.setTextColor(getResources().getColor(R.color.yourColor)); 

// set button background colour to be green 
btn.setBackgroundColor(Color.GREEN); 
+1

Cela modifiera la couleur du texte sur le bouton, mais conservera cette couleur pendant les différents états du bouton (par exemple enfoncé). Dans la plupart des scénarios, lorsque la couleur d'arrière-plan d'un bouton change pendant un état, il est également souhaitable de changer la couleur du texte du bouton, c'est là que la réponse de @Konstantin Burov est à portée de main. –

+0

cela ne va pas définir des couleurs différentes pour chaque état ... –

+0

Cela ne répond pas à la question d'origine. La question est de savoir comment définir des couleurs basées sur un état dans une vue de texte, tout comme vous pouvez définir des drawables basés sur l'état. – alchemist

1

Changer la couleur du texte du bouton

Parce que cette méthode est maintenant dépréciée

button.setTextColor(getResources().getColor(R.color.your_color)); 

J'utilise ce qui suit:

button.setTextColor(ContextCompat.getColor(mContext, R.color.your_color)); 
2

ok très simple d'abord aller à 1. res-valuse et Colors.xml ouverte 2.Copie 1 du texte défini par exemple leur # FF4081 et changer le nom, par exemple, je l'ai changé au blanc et le changement sa valeur, par exemple, j'ai changé à #FFFFFF pour la valeur blanche comme celui-ci

<color name="White">#FFFFFF</color> 

puis à l'intérieur de votre bouton ajouter cette ligne

b3.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.White)); 

ok b3 est le nom de mon bouton ainsi changé du nom de votre bouton tous les autres seront identiques si vous utilisez la couleur blanche si vous changez de couleur différente puis changez le blanc au nom de votre couleur mais d'abord vous définissez cette couleur en couleurs .xml comme je l'ai expliqué dans le pont 2

Questions connexes