web-dev-qa-db-fra.com

Android: la couleur du bouton désactivé dans le sélecteur ne s'affiche pas?

J'essaie de créer un bouton avec un sélecteur. Mon bouton peut avoir les états suivants:

  • Activé Désactivé
  • Pressé/Non pressé

Selon les états mentionnés ci-dessus. J'ai besoin de manipuler le bouton:

  • Couleur du texte
  • image de fond

Le bouton démarre lorsque je suis désactivé, il devrait donc avoir le texte désactivé et l’arrière-plan du bouton désactivé. Mais je peux voir le textColor par défaut (spécifié dans le style) et NO image d'arrière-plan!

Voici mon sélecteur button_selector.xml

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">

    <item Android:state_pressed="false"
        Android:state_enabled="false"
        Android:textColor="#9D9FA2"
        Android:drawable="@drawable/button" />    

    <item Android:state_pressed="true"
        Android:state_enabled="true"
        Android:drawable="@drawable/button_pressed"/>

    <item Android:state_pressed="true"
        Android:state_enabled="false"
        Android:textColor="#9D9FA2"
        Android:drawable="@drawable/button"/>

    <item Android:state_pressed="false"
        Android:state_enabled="true"
        Android:drawable="@drawable/button"/>    

</selector>

Et voici la déclaration de mon bouton dans le fichier my layout.xml

    <Button Android:id="@+id/reserve_button"
        Android:text="@string/reserve_button"
        Android:layout_width="120dp"
        Android:layout_height="40dp"
        Android:layout_marginTop="10dp"
        Android:layout_marginLeft="20dp"
        Android:paddingRight="15dp"
        Android:layout_gravity="left"
        style="@style/buttonStyle"
        Android:background="@drawable/button_selector" />

Et enfin c'est mon style (où ma textColor par défaut est définie)

<?xml version="1.0" encoding="utf-8"?>

 <resources>

     <style name="buttonStyle">
      <item name="Android:textStyle">bold</item>
      <item name="Android:textColor">#282780</item>
      <item name="Android:textSize">18sp</item>
     </style>

</resources>

S'il vous plaît aider!

85
Nouran H

Vous devez également créer un ColorStateList pour les couleurs de texte identifiant différents états.

Faites ce qui suit:

  1. Créez un autre fichier XML dans res\color nommé quelque chose comme text_color.xml.

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
      <!-- disabled state -->
      <item Android:state_enabled="false" Android:color="#9D9FA2" /> 
      <item Android:color="#000"/>
    </selector>
    
  2. Dans votre style.xml, mettez une référence à cette text_color.xml fichier comme suit:

    <style name="buttonStyle" parent="@Android:style/Widget.Button">
      <item name="Android:textStyle">bold</item>
      <item name="Android:textColor">@color/text_color</item>
      <item name="Android:textSize">18sp</item>
    </style>
    

Cela devrait résoudre votre problème.

222
Adil Soomro

1.Créez un dossier de couleurs dans/res/folder et dans un dossier de couleurs créez sur XML:

text_color_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
 <!-- disabled state --> 
<item Android:state_enabled="false" Android:color="#776678" /> 
 <item Android:color="#ffffff"/>
</selector>

2.Maintenant, créez une mise en page XML: -

 <Button

        Android:id="@+id/button_search"

        Android:layout_width="652dp"

        Android:layout_height="48dp"

        Android:layout_alignParentLeft="true"

        Android:layout_alignParentTop="true"

        Android:layout_marginTop="18dp"

        Android:background="@Android:color/transparent"

        Android:text="Hello Bhaskar"

        Android:textColor="@color/text_color_selector"/>  
5

La solution la plus simple consiste à définir le filtre de couleur sur l’image d’arrière-plan du bouton et comme je l’ai vu ici

Vous pouvez faire comme suit:

if ('need to set button disable')
    button.getBackground().setColorFilter(Color.GRAY, PorterDuff.Mode.MULTIPLY);
else
    button.getBackground().setColorFilter(null);

J'espère que j'ai aidé quelqu'un ...

4
Woody