web-dev-qa-db-fra.com

Modifier par programme l'arrière-plan du bouton dessinable surClick

J'essaie de basculer les dessinables d'arrière-plan de mon bouton, de sorte que lorsque l'utilisateur clique sur le bouton, son arrière-plan est modifié et lorsque l'utilisateur clique à nouveau sur le bouton, son arrière-plan revient par défaut. Voici mon code:

public void Favorites(View V) {
  Button star = (Button) findViewById(R.id.buttonStar);
  if(star.getBackground().equals(R.drawable.btn_star_off)) {
    star.setBackgroundResource(R.drawable.btn_star_on);
  } else {               
    star.setBackgroundResource(R.drawable.btn_star_off);
  }
}

Je suis sûr que ce n'est pas ainsi que vous utilisez les drawables avec les instructions if. Quelqu'un peut-il suggérer un moyen de le faire?

10
Andre Bounames
private boolean isButtonClicked = false; // You should add a boolean flag to record the button on/off state

protected void onCreate(Bundle savedInstanceState) {
    ......
    Button star = (Button) findViewById(R.id.buttonStar);
    star.setOnClickListener(new OnClickListener() { // Then you should add add click listener for your button.
        @Override
        public void onClick(View v) {
            if (v.getId() == R.id.buttonStar) {
                isButtonClicked = !isButtonClicked; // toggle the boolean flag
                v.setBackgroundResource(isButtonClicked ? R.drawable.btn_star_on : R.drawable.btn_star_off);
            }
        }
    });
}
16
li2

Vous pouvez créer un xml dans le dossier dessinable. Ce xml (vous choisissez le nom ... appelons-le "bg_button_star.xml") pourrait ressembler à ceci:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:state_selected="true" Android:drawable="@drawable/btn_star_on" />
<item Android:drawable="@drawable/btn_star_off" />

Ensuite, vous devez affecter ce fichier dessinable à la propriété d'arrière-plan du bouton dans le fichier de disposition.

Android:background="@drawable/bg_button_star"

Si vous voulez le faire par programme, il vous suffit de faire:

button.setBackgroundResource(R.drawable.bg_button_star);

Lorsque l'utilisateur clique pour la première fois sur le bouton, vous définissez l'état Sélectionné sur "vrai". L'arrière-plan change en conséquence. (vice-versa pour le "faux" état sélectionné).

7
nicopasso

Vous pouvez faire dans votre onClick () quelque chose comme:

if(star.getTag()==R.drawable.btn_star_on){
    star.setTag(R.drawable.btn_star_off);
    star.setBackgroundResource(R.drawable.btn_star_off);
} else {
    star.setTag(R.drawable.btn_star_on);
    star.setBackgroundResource(R.drawable.btn_star_on);
}

De toute évidence, il est préférable de placer la balise avant l'instruction if and else en fonction de vos informations. Je ne connais pas le reste de votre code et comment vous vérifiez si ce bouton doit être iniziatilisé avec la ressource drawable btn_star_off ou btn_star_on

2
Giorgio Antonioli

Vous pouvez essayer ça.

public void Favorites(View V) {
Button star = (Button) findViewById(R.id.buttonStar);

if(star.getBackground().getConstantState().equals(getResources().getDrawable(R.drawable.btn_star_off).getConstantState())) 
    {
            star.setBackground(R.drawable.btn_star_on);
    } else {               
            star.setBackground(R.drawable.btn_star_off);
  }
}

Mais assurez-vous d'appeler cette méthode surClick () du bouton Démarrer.

Sinon, vous devez faire quelque chose comme ça.

Button star = (Button) findViewById(R.id.buttonStar);
star.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

      if(v.getBackground().getConstantState().equals(getResources().getDrawable(R.drawable.btn_star_off).getConstantState())) 
       {
            v.setBackground(R.drawable.btn_star_on);
       } else {               
            v.setBackground(R.drawable.btn_star_off);
       }
        }
    });
2
Pooja

Dans ce cas, au lieu d'utiliser Button, vous devez utiliser ToggleButton.

Il existe un guide API pour cela: http://developer.Android.com/guide/topics/ui/controls/togglebutton.html

0
John Cordeiro

Ne fais pas ça comme ça. Utilisez plutôt une ressource de sélection http://www.compiletimeerror.com/2014/03/Android-button-selector-tutorial-with.html

0
Quark