218 votes

Désactivation de l'EditText dans Android

Dans mon application, j'ai un EditText sur lequel l'utilisateur n'a qu'un accès en lecture et non en écriture.

Dans le code, je mets android:enabled="false" .

Bien que l'arrière-plan de EditText soit devenu sombre, lorsque je clique dessus, le clavier s'affiche et je peux modifier le texte.

Que dois-je régler pour désactiver EditText ?

2 votes

Il est possible de préserver à la fois le style de la vue et le comportement de défilement. Pour désactiver un EditText tout en conservant ces propriétés, il suffit d'utiliser UI.setReadOnly(myEditText, true) de cette bibliothèque . Si vous souhaitez reproduire ce comportement sans la bibliothèque, consultez le site suivant le code source pour cette petite méthode.

273voto

Nailuj Points 7283

Je pense que la bonne solution serait de définir android:editable="false" .

Et si vous vous demandez pourquoi mon lien pointe vers les attributs de TextView la réponse est parce que EditText hérite de TextView :

EditText est une mince couche de protection au-dessus de TextView qui se configure pour être éditable.

Mise à jour :
Comme indiqué dans les commentaires ci-dessous, editable est obsolète ( depuis le niveau 3 de l'API ). Vous devriez plutôt utiliser inputType (avec la valeur none ).

1 votes

Merci Nailuj, malheureusement cela n'a pas fonctionné. Après avoir ajouté votre suggestion, le clavier apparaît et il est possible de modifier le texte.

0 votes

@Hesam : Je pense que vous faites quelque chose de mal alors. Si vous lisez la documentation de l'outil android:editable il est indiqué que l'attribut TextView (et EditText qui hérite de la TextView ) n'aura pas de méthode d'entrée si cet attribut a pour valeur false . Je viens de le tester moi-même, et le réglage de android:editable="false" sur un EditText dans ma propre application rend impossible l'écriture de texte à l'intérieur (il est cependant possible de positionner le curseur à l'intérieur). Vous devriez poster un exemple de votre code, nous pourrions ainsi voir ce qui ne va pas.

0 votes

Merci Nailuj, vous avez raison. J'ai mis votre code au mauvais endroit. Cependant, après l'avoir corrigé, il fonctionne correctement.

178voto

Sean Android Points 351

Utiliser EditText.setFocusable(false) pour désactiver l'édition
EditText.setFocusableInTouchMode(true) pour activer l'édition ;

1 votes

Cela fonctionne, mais ce n'est pas une bonne pratique, car la vue semble pouvoir être modifiée, mais ce n'est pas le cas. Cela a bien fonctionné pour moi parce que ma vue avait un arrière-plan personnalisé, donc +1.

4 votes

@kaneda. En fait, je préfère cela. Je ne veux pas que ma boîte soit grisée :)

1 votes

Dans Android 4.4, cette option permet de conserver la couleur originale du texte. Utilisation de editText.setEnabled(false); changera la couleur du texte en gris. En revanche, les spinners ne modifient pas la couleur du texte lorsque l'on utilise la fonction setEnabled Ce qui fait que l'expérience n'est pas homogène.

68voto

Sampath Kumar Points 577

Cette option permet de désactiver la saisie des données par l'utilisateur

android:focusable="false"

Android:editable="false" Cette méthode est obsolète.

1 votes

C'est la réponse qui devrait être acceptée. Définir le type d'entrée à "aucun" comme suggéré dans d'autres réponses ne fonctionne pas (toujours). L'activation de la valeur "false" empêche l'édition, mais atténue également le texte, ce qui n'est pas forcément souhaitable.

4voto

wangzhengyi Points 41

Si vous utilisez android:editable="false" eclipse vous rappellera ce message "Android:editable is deprecated : Utilisez inputType à la place".

J'utilise donc android:focusable="false" au lieu de cela, cela a bien fonctionné pour moi.

3voto

cx0der Points 356

Utilisation TextView au lieu de cela.

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