90 votes

Comment changer la couleur d'un bouton dans Android lorsqu'il est cliqué ?

Je travaille sur une application Android. Je veux avoir 4 boutons à placer horizontalement en bas de l'écran. Dans ces 4 boutons, 2 boutons ont des images. La bordure des boutons doit être de couleur noire et la bordure doit être aussi fine que possible. Lorsque je clique sur le bouton, je veux que l'arrière-plan du bouton devienne bleu sans que la couleur de la bordure soit modifiée et qu'il reste dans cette couleur pendant un certain temps. Comment puis-je réaliser ce scénario dans Android ?

0 votes

Duplicata possible de Comment changer la couleur d'un chemin traçable vectoriel en cliquant sur un bouton ? Je l'ai signalé comme étant un doublon, vous pouvez vérifier ma réponse ici : stackoverflow.com/a/55205149/3763032

136voto

methode Points 1920

Une approche consiste à créer un fichier XML comme celui-ci dans drawable appelé whatever.xml :

<?xml version="1.0" encoding="utf-8"?> 
  <selector xmlns:android="http://schemas.android.com/apk/res/android"> 
      <item android:state_focused="true" android:state_pressed="true" 
            android:drawable="@drawable/bgalt" /> 
      <item android:state_focused="false" android:state_pressed="true" 
            android:drawable="@drawable/bgalt" /> 
      <item android:drawable="@drawable/bgnorm" /> 
  </selector>

bgalt et bgnorm sont des images PNG dans drawable.

Si vous créez les boutons de façon programmatique dans votre activité, vous pouvez définir l'arrière-plan avec :

final Button b = new Button (MyClass.this);
b.setBackgroundDrawable(getResources().getDrawable(R.drawable.whatever));

Si vous définissez le style de vos boutons avec un XML, vous ferez quelque chose comme :

<Button
  android:id="@+id/mybutton"
  android:background="@drawable/watever" />

Je vais essayer de vous trouver un lien vers un tutoriel. J'espère que cela vous aidera.

16 votes

Vous pouvez également remplacer ces éléments dessinables dans le fichier XML par des définitions de couleurs si vous voulez éviter d'utiliser des images.

7 votes

@jshin47 une quantité empirique d'essais et d'erreurs. J'ai écrit deux livres sur le développement Android maintenant :-)

0 votes

@haseman - Pouvez-vous poster les liens de ces 2 livres ou me les communiquer à l'adresse brk0018@gmail.com. Je serais heureux de les parcourir et de mieux apprendre.

79voto

Faakhir Points 346

Enregistrez ce code dans le dossier drawable avec "bg_button.xml" et appelez "@drawable/bg_button" comme arrière-plan du bouton dans votre xml :

<?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="#004F81" />
            <stroke
                android:width="1dp"
                android:color="#222222" />
            <corners
                android:radius="7dp" />
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
        </shape>
    </item>
    <item>
        <shape>
            <gradient
                android:startColor="#89cbee"
                android:endColor="#004F81"
                android:angle="270" />
            <stroke
                android:width="1dp"
                android:color="#4aa5d4" />
            <corners
                android:radius="7dp" />
            <padding
                android:left="10dp"
                android:top="10dp"
                android:right="10dp"
                android:bottom="10dp" />
        </shape>
    </item>
</selector>

2 votes

Merci mec, en utilisant le style vous pouvez réduire la taille de l'application. bonne idée de ne pas utiliser de drawable

0 votes

D'autre part, les éléments dessinés vectoriels xml sont généralement moins performants que les images, surtout sur les appareils plus anciens. N'optimisez pas prématurément, mais gardez également cela à l'esprit.

10voto

Sankar Ganesh Points 6607

Hai se réfère à ça,

boolean check=false;
Button backward_img;        Button backward_img1;
backward_img = (Button) findViewById(R.id.bars_footer_backward);
backward_img1 = (Button) findViewById(R.id.bars_footer_backward1);
backward_img.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View arg0) {
         check=true;
         backward_img.setBackgroundColor(Color.BLUE);
    }
});

if(check== true)
{
    backward_img1.setBackgroundColor(Color.RED);
    backward_img.setBackgroundColor(Color.BLUE);
}

2 votes

Le BG sera ainsi défini de façon permanente, c'est-à-dire que si l'utilisateur clique sur le bouton retour, l'arrière-plan sera rouge.

0 votes

@methode : ok référez-vous à la nouvelle réponse, j'ai corrigé l'ancienne réponse.

6voto

Pir Fahim Shah Points 1786

Si vous voulez changer l'image ou la couleur de l'arrière-plan du bouton lorsqu'il est pressé, il suffit de copier ce code et de le coller dans votre projet à l'endroit exact décrit ci-dessous.

      <!-- Create new xml file like mybtn_layout.xml file in drawable -->
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/pressed" /> <!--pressed --> 
<item android:drawable="@drawable/normal" /> <!-- Normal -->
</selector>
  <!-- Now this file should be in a drawable folder and use this 
  single line code in    button code to get all the properties of this xml file -->

    <Button
      android:id="@+id/street_btn"
      android:layout_width="wrap_content"
      android:background="@drawable/layout_a" > <!-- your required code -->
    </Button>

4voto

James Points 2722

Essayez ceci......

Créez d'abord un fichier xml nommé button_pressed.xml. Voici son contenu.

<?xml version="1.0" encoding="utf-8"?>
<selector
  xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true" 
          android:state_pressed="false" 
          android:drawable="@drawable/icon_1" />
    <item android:state_focused="true" 
          android:state_pressed="true"
          android:drawable="@drawable/icon_1_press" />
    <item android:state_focused="false" 
          android:state_pressed="true"
            android:drawable="@drawable/icon_1_press" />
    <item android:drawable="@drawable/icon_1" />
</selector>

Noe essayez ceci sur votre bouton.

int imgID = getResources().getIdentifier("button_pressed", "drawable", getApplication().getPackageName());
button.setImageResource(imgID);

button_pressed.xml doit se trouver dans le dossier drawable. icon_1_press et icon_1 sont deux images pour le bouton pressé et le focus normal.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X