87 votes

setEnabled() vs setClickable(), quelle est la différence ?

Jusqu'à présent, lorsque je voulais empêcher l'utilisateur d'appuyer sur le bouton, je réglais l'option button.setClickable(false); et modifie généralement le texte en une sorte de couleur grise (pour indiquer à l'utilisateur que le bouton est désactivé). Aujourd'hui, je suis tombé sur le setEnabled() propriété.

J'ai donc consulté la documentation pour voir l'explication de la méthode ci-dessous :

setEnabled(boolean enabled)
   Set the enabled state of this view.

Qu'est-ce que cela signifie ? Quelle est la différence entre l'état activé/état cliquable et l'état désactivé/état non cliquable ? Quelqu'un pourrait-il m'expliquer quelle est la différence entre ce que je faisais précédemment, à savoir utiliser la propriété "clickable", et utiliser la propriété "non clickable" ? setEnabled() la propriété ? Que faut-il utiliser quand ? J'ai fait des recherches sur Stack Overflow mais je n'ai rien trouvé à ce sujet.

87voto

CommonsWare Points 402670

Qu'est-ce que ça veut dire ?

Citation : la page Wikipedia pour "GUI widget" (widget GUI) :

Dans le contexte d'une application, un widget peut être activé ou désactivé à un moment donné. Un widget activé a la capacité de répondre à des événements, tels que des frappes au clavier ou des actions de la souris. Un widget qui ne peut pas répondre à de tels événements est considéré comme désactivé. L'apparence d'un widget désactivé est généralement différente de celle d'un widget activé ; le widget désactivé peut être dessiné dans une couleur plus claire, ou peut être visuellement obscurci d'une certaine manière. Voir l'image à droite pour un exemple.

Ce concept existe depuis quelques décennies et se retrouve dans la plupart des cadres d'interface graphique.

quelle est la différence entre l'état activé/état cliquable et l'état désactivé/état non cliquable ?

Dans Android, un widget qui n'est pas cliquable ne répond pas aux événements de clic. Un widget désactivé n'est non seulement pas cliquable, mais il indique aussi visuellement qu'il est désactivé.

que voulez-vous dire par : " puisque cela rend le bouton visuellement "désactivé" ? comment cela le change-t-il visuellement ?

Qu'est-ce qui fait qu'un Button ressemble et réagit comme un Button est son arrière-plan, qui est un StateListDrawable . Il existe une image spécifique utilisée pour l'état d'invalidité.

7voto

Dilip Poudel Points 109

Donc, en gros, un false enabled ne répond à aucune réponse et un false clickable répond toujours lorsqu'il est défini au moment de l'exécution, et croyez-moi, je viens de l'essayer.

7voto

Trevor Points 88

Une grande différence que je ne vois pas mentionnée ailleurs concerne le chevauchement des vues. Une vue avec clickable=true et enabled=false ne vous permettra pas d'appuyer sur une vue située derrière elle. Mais une vue avec clickable=false vous permettra d'appuyer sur une vue située derrière elle.

2voto

Comme l'a dit Dilip, setClickable ne fonctionne pas s'il est défini au moment de l'exécution. Voici une astuce pour le faire fonctionner :

ToggleButton toggle = ...
toggle.setOnTouchListener(new ToggleButton.OnTouchListener() {

  @Override
  public boolean onTouch(View v, MotionEvent event) {
     // If true is returned, the event is eated by the TouchListener
     return !v.isClickable();
  }
});

1voto

Renato Points 148

Les vues peuvent également répondre à des claviers externes, à des pavés directionnels (manettes de jeu/télécommande) et à des dispositifs d'assistance ( commutateur , les lecteurs d'écran ).

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