web-dev-qa-db-fra.com

Android: change le texte du bouton et la couleur de fond

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:

  • Par défaut: texte noir/fond blanc
  • Pressé: texte blanc/fond bleu

EDIT: réponse

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)

61
Maelig

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>
42
Mitesh Shah

Depuis le niveau 21 de l’API, vous pouvez utiliser:

Android:backgroundTint="@Android:color/white"

il suffit de l'ajouter dans votre xml

25
Jonsmoke

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.

23
user1718854

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"/>
12
Sỹ Phạm

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" />
9
Abdul Wadood

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">
3
Gene