Android: bouton de changement de fond par programmation
J'ai ce fichier de ressources pour les couleurs
<resources>
<color name="CLR_BLUE">#00f</color>
<color name="CLR_RED">#f00</color>
<color name="CLR_GREEN">#0f0</color>
<color name="CLR_YELLOW">#ff0</color>
<color name="CLR_BLUE_DARK">#00a</color>
<color name="CLR_RED_DARK">#a00</color>
<color name="CLR_GREEN_DARK">#0a0</color>
<color name="CLR_YELLOW_DARK">#aa0</color>
</resources>
Et cette méthode qui est appelée lorsque l'utilisateur clique sur l'un des quatre couleur Buttons
private void changeBackground(Button pressedBtn)
{
int oldColor = 0;
int newColor = 0;
if(pressedBtn == greenBtn) {
oldColor = R.color.CLR_GREEN;
newColor = R.color.CLR_GREEN_DARK;
}
else if (pressedBtn == redBtn) {
oldColor = R.color.CLR_RED;
newColor = R.color.CLR_RED_DARK;
}
else if (pressedBtn == yellowBtn) {
oldColor = R.color.CLR_YELLOW;
newColor = R.color.CLR_YELLOW_DARK;
}
else if (pressedBtn == blueBtn) {
oldColor = R.color.CLR_BLUE;
newColor = R.color.CLR_BLUE_DARK;
}
else return;
pressedBtn.setBackgroundResource(newColor);
SystemClock.sleep(500);
pressedBtn.setBackgroundResource(oldColor);
}
Le problème, c'est la couleur du Bouton ne change pas lorsque vous appuyez dessus.
J'ai marché avec un débogueur et il atteint réellement les points de droit dans la méthode, ce n'est donc pas un problème. Je pense que le problème est dans pressedBtn.setBackgroundResource(newColor)
mais je ne comprends pas pourquoi.
PS: de toute façon, si vous avez une meilleure solution pour modifier un bouton de couleur quand ils sont pressés et, après une demi-seconde, le changement de couleur d'origine, faites le moi savoir.
OriginalL'auteur Federico klez Culloca | 2010-06-22
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser un fichier xml comme celui ci-dessous, pour créer des états pour votre bouton.
L'info sur les attributs disponibles est ici.
Il vous suffit de copier ce fichier xml dans un drawable votre dossier dans votre projet, nommez-le par exemple custom_button.xml et la référence dans votre mise en page avec
android:background="@drawable/custom_button"
Ici est un fichier xml...
J'ai dû adapter un peu mais fonctionne parfaitement! Merci beaucoup
OriginalL'auteur Levara
Nous avons essayé de mettre en œuvre l'onglet fonctionnalités à l'aide de simples boutons Android. Je n'arrivais pas à obtenir le bon comportement à l'aide de XML doit être fait quelque chose de mal. Par exemple, j'ai pu obtenir la couleur d'un bouton pour changer de jaune aussi longtemps que le bouton a été pressé, mais il allait revenir à la couleur d'origine lors de la gauche.
Enfin, j'ai pu obtenir le comportement souhaité par l'utilisation de code suivant dans le gestionnaire d'événements click pour chacun des boutons de l'onglet. Espérons que cela aide quelqu'un ayant la même question que moi.
OriginalL'auteur Sandy1978
setBackgroundResource attend un drawable, pas une couleur. Vous souhaitez setBackgroundColor.
Aussi, vos couleurs doivent avoir au moins 6 chiffres, #RRVVBB
I. e., pour le bleu: #0000FF
Je pense que ce que vous avez peut-être équivalent à #00000F, ce qui est proche du noir...
Et enfin, vous devriez ne jamais dormir dans le thread d'INTERFACE utilisateur (ou de modifier des éléments de l'UI pas dans le thread d'INTERFACE utilisateur). Voir Indolore Threading pour un certain nombre de façons différentes d'utiliser les autres threads. Je pense que postDelayed peut-être ce que vous cherchez.
Voir modifications pour plus d'info
OriginalL'auteur Cheryl Simon