Comment puis-je changer les couleurs du texte et de l'arrière-plan lorsque l'on appuie sur mon bouton, avec XML?
Pour changer la couleur du texte, je peux faire:
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:state_pressed="true" Android:color="mycolor"/>
<item Android:color="mycolor2/>
</selector>
Pour changer le fond que je peux faire (en l’utilisant dans un sélecteur/élément avec une référence pouvant être dessinée):
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android">
<solid Android:color="#FF0079FF" />
</shape>
Mais comment puis-je faire les deux? Disons que je veux avoir:
J'ai totalement oublié que l'arrière-plan et la couleur du texte sont gérés séparément, c'est pourquoi je l'ai fait:
<Button
Android:textColor="@color/filtersbuttoncolors"
Android:background="@drawable/mybackgroundcolors" />
Dans mybackgroundcolors.xml, je gère l'arrière-plan et dans filtersbuttoncolors.xml, je gère la couleur du texte. Dans les deux fichiers xml, je gère l'état (appuyé, sélectionné, par défaut)
Voici un exemple de dessinable qui sera blanc par défaut, noir lorsque vous appuyez dessus:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:state_pressed="true">
<shape>
<solid
Android:color="#1E669B"/>
<stroke
Android:width="2dp"
Android:color="#1B5E91"/>
<corners
Android:radius="6dp"/>
<padding
Android:bottom="10dp"
Android:left="10dp"
Android:right="10dp"
Android:top="10dp"/>
</shape>
</item>
<item>
<shape>
<gradient
Android:angle="270"
Android:endColor="#1E669B"
Android:startColor="#1E669B"/>
<stroke
Android:width="4dp"
Android:color="#1B5E91"/>
<corners
Android:radius="7dp"/>
<padding
Android:bottom="10dp"
Android:left="10dp"
Android:right="10dp"
Android:top="10dp"/>
</shape>
</item>
</selector>
Depuis le niveau 21 de l’API, vous pouvez utiliser:
Android:backgroundTint="@Android:color/white"
il suffit de l'ajouter dans votre xml
Je pense que faire de cette façon est beaucoup plus simple:
button.setBackgroundColor(Color.BLACK);
Et vous devez import Android.graphics.Color;
pas: import Android.R.color;
Ou vous pouvez simplement écrire le code hexadécimal de 4 octets (et non de 3 octets) 0xFF000000
où le premier octet définit l'alpha.
ajouter la ligne ci-dessous dans styles.xml
<style name="AppTheme.Gray" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorButtonNormal">@color/colorGray</item>
</style>
dans le bouton, ajoutez Android:theme="@style/AppTheme.Gray"
, exemple:
<Button
Android:theme="@style/AppTheme.Gray"
Android:textColor="@color/colorWhite"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="@Android:string/cancel"/>
En complément de la réponse de @ Jonsmoke.
Pour les API de niveau 21 et supérieur, vous pouvez utiliser:
Android:backgroundTint="@Android:color/white"
en XML pour la disposition des boutons.
Pour un niveau d’API inférieur à 21, utilisez un AppCompatButton utilisant app espace de noms au lieu de Android pour backgroundTint .
Par exemple:
<Android.support.v7.widget.AppCompatButton
Android:id="@+id/my_button"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="My Button"
app:backgroundTint="@Android:color/white" />
Lorsque vous créez une application, un fichier appelé styles.xml est créé dans votre dossier res/values. Si vous modifiez les styles, vous pouvez modifier l’arrière-plan, la couleur du texte, etc. de toutes vos mises en page. De cette façon, vous n’avez pas à aller dans chaque mise en page individuelle et à la modifier manuellement.
styles.xml:
<resources xmlns:Android="http://schemas.Android.com/apk/res/Android">
<style name="Theme.AppBaseTheme" parent="@Android:style/Theme.Light">
<item name="Android:editTextColor">#295055</item>
<item name="Android:textColorPrimary">#295055</item>
<item name="Android:textColorSecondary">#295055</item>
<item name="Android:textColorTertiary">#295055</item>
<item name="Android:textColorPrimaryInverse">#295055</item>
<item name="Android:textColorSecondaryInverse">#295055</item>
<item name="Android:textColorTertiaryInverse">#295055</item>
<item name="Android:windowBackground">@drawable/custom_background</item>
</style>
<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
<!-- All customizations that are NOT specific to a particular API-level can go here. -->
</style>
parent="@Android:style/Theme.Light"
est la couleur native de Google. Voici une référence des styles natifs: https://Android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/res/res/values/themes.xml
name="Theme.AppBaseTheme"
signifie que vous créez un style qui hérite de tous les styles de parent="@Android:style/Theme.Light"
. Vous pouvez ignorer cette partie, sauf si vous souhaitez hériter à nouveau d'AppBaseTheme. = <style name="AppTheme" parent="AppBaseTheme">
@ drawable/custom_background est une image personnalisée que j’ai placée dans le dossier drawable. C'est une image 300x300 png.
# 295055 est une couleur bleu foncé.
Mon code modifie la couleur de fond et du texte. Pour le texte du bouton, consultez les styles de Google (le lien que je vous ai donné ci-dessus).
Ensuite, dans Android Manifest, souvenez-vous d'inclure le code:
<application
Android:theme="@style/Theme.AppBaseTheme">