J'essaie de créer un bouton avec un sélecteur. Mon bouton peut avoir les états suivants:
Selon les états mentionnés ci-dessus. J'ai besoin de manipuler le bouton:
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!
Vous devez également créer un ColorStateList
pour les couleurs de texte identifiant différents états.
Faites ce qui suit:
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>
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.
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"/>
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 ...