408 votes

Comment désactiver un bouton Android ?

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 ?

screen shot of sample layout

868voto

Varun Points 12399

Avez-vous essayé ?

myButton.setEnabled(false); 

Mise à jour : Merci à Gwen. J'ai presque oublié que android:clickable peut être défini dans votre mise en page XML pour déterminer si un bouton est cliquable ou non.

49voto

Gwen Points 257

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 .

39voto

Deepak Sharma Points 980

Il suffit d'écrire une seule ligne de code dans votre activité

Button btn = (Button) findViewById(R.id.button1);
btn.setEnabled(false);

Lorsque vous voulez activer le même bouton, il suffit d'écrire

Button btn = (Button) findViewById(R.id.button1);
btn.setEnabled(true);

26voto

Paolo Rovelli Points 892

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" />

9voto

ayorhan Points 649

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));

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