J'ai créé une mise en page qui contient deux boutons, Suivant et Précédent. Entre ces boutons, je génère des vues dynamiques. Ainsi, lorsque je lance l'application pour la première fois, je veux désactiver le bouton "Précédent" car il n'y aura pas de vues précédentes. Je veux également désactiver le bouton "Suivant" lorsqu'il n'y a plus de vues à afficher. Existe-t-il un moyen de désactiver ces boutons ?
Réponses
Trop de publicités?Vous ne pouvez pas l'activer ou le désactiver dans votre XML (puisque votre mise en page est définie au moment de l'exécution), mais vous pouvez définir si le bouton est cliquable au lancement de l'activité avec android:clickable
.
En Java, une fois que vous avez la référence du bouton :
Button button = (Button) findviewById(R.id.button);
Pour activer/désactiver le bouton, vous pouvez utiliser l'un ou l'autre :
button.setEnabled(false);
button.setEnabled(true);
Ou :
button.setClickable(false);
button.setClickable(true);
Puisque vous voulez désactiver le bouton dès le début, vous pouvez utiliser bouton.setEnabled(false) ; dans la méthode onCreate. Sinon, à partir de XML, vous pouvez directement utiliser :
android:clickable = "false"
Donc :
<Button
android:id="@+id/button"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:text="@string/button_text"
android:clickable = "false" />
Dans mon cas,
myButton.setEnabled(false);
myButton.setEnabled(true);
fonctionne bien et active et désactive le bouton comme il se doit. Mais une fois que le bouton est désactivé, il ne revient jamais à l'état activé, même s'il est cliquable. J'ai essayé d'invalider et de rafraîchir l'état du bouton, mais sans succès.
myButton.invalidate();
myButton.refreshDrawableState();
Si vous, ou quelqu'un d'autre, rencontrez un problème similaire, ce qui fonctionne pour moi, c'est de redéfinir le dessinable d'arrière-plan. Cela fonctionne à tous les niveaux de l'API.
myButton.setEnabled(true);
myButton.setBackgroundDrawable(activity.getResources().getDrawable(R.drawable.myButtonDrawable));