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?
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);
}
}
});
}
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é).
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
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);
}
}
});
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
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