J'essaie de définir la couleur de fond d'un bouton dans mon application et je ne parviens pas à obtenir le résultat escompté ...
La couleur que j'essaie de définir est holo_green_light(#ff99cc00)
. Pour ce faire, j'utilise setColorFilter(0xff99cc00, PorterDuff.Mode.MULTIPLY);
La couleur que je reçois n’est pas le holo_green_light
mais un mélange de gris clair et de holo_green_light
.
J'ai essayé d'utiliser le LightingColorFilter
sans grand succès.
Y a-t-il un moyen de le faire par programme, de sorte que le bouton apparaisse comme un bouton et non comme un rectangle plat avec la couleur dont j'ai besoin.
Les boutons sont plus complexes que le simple changement d'une couleur ...
Les boutons Android sont créés à l’aide de quelques 9 correctifs et de différents états. Vous devriez jeter un oeil sur Android Holo Colors pour les générer, vous devez sélectionner "Color Button" (Bouton de couleur) et il générera les images et XML nécessaires.
C'est ma façon de faire un bouton personnalisé avec une couleur différente.
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" >
<stroke Android:width="3dp"
Android:color="#80FFFFFF" />
<corners Android:radius="25dp" />
<gradient Android:angle="270"
Android:centerColor="#90150517"
Android:endColor="#90150517"
Android:startColor="#90150517" />
</shape>
De cette façon, vous définissez comme arrière-plan.
<Button Android:id="@+id/button"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Button"
Android:layout_marginBottom="25dp"
Android:layout_centerInParent="true"
Android:background="@drawable/button"/>
Si cela ne vous dérange pas de le coder en dur, vous pouvez le faire ~> Android: background = "# eeeeee" et lâcher la couleur hex # désirée.
Ressemble à ça....
<Button
Android:id="@+id/button1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentLeft="true"
Android:layout_alignParentRight="true"
Android:layout_below="@+id/textView1"
Android:text="@string/ClickMe"
Android:background="#fff"/>
Si vous souhaitez conserver le style général (coins arrondis, etc.) et simplement changer la couleur de fond, j'utilise la propriété backgroundTint.
Android:backgroundTint="@Android:color/holo_green_light"
Créez /res/drawable/button.xml
avec le contenu suivant:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:shape="rectangle" Android:padding="10dp">
<!-- you can use any color you want I used here gray color-->
<solid Android:color="#90EE90"/>
<corners
Android:bottomRightRadius="3dp"
Android:bottomLeftRadius="3dp"
Android:topLeftRadius="3dp"
Android:topRightRadius="3dp"/>
</shape>
Et ensuite, vous pouvez utiliser les éléments suivants:
<Button
Android:id="@+id/button_save_prefs"
Android:text="@string/save"
Android:background="@drawable/button"/>
Pourquoi ne pas simplement utiliser setBackgroundColor(getResources().getColor(R.color.holo_light_green))
?
Éditer: si vous voulez quelque chose qui ressemble plus à un bouton Android, vous voulez créer un dégradé et le définir comme arrière-plan. Pour un exemple, vous pouvez consulter cette question .
En plus de la réponse de Mark Proctor:
Si vous souhaitez conserver le style par défaut tout en ayant une couleur conditionnelle sur le bouton, définissez la propriété backgroundTint
comme suit:
Android:backgroundTint="@drawable/styles_mybutton"
Créez le fichier associé /res/drawable/styles_mybutton.xml, puis utilisez le modèle suivant et modifiez les couleurs selon vos goûts:
<?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="@Android:color/white">
</item>
<!-- Default state-->
<item
Android:color="#cfc">
</item>
</selector>
Pour conserver le style, utilisez:
int color = Color.parseColor("#99cc00");
button.getBackground().mutate().setColorFilter(new PorterDuffColorFilter(color, PorterDuff.Mode.SRC));