252 votes

Définir l'inputType d'un EditText de manière programmatique ?

Comment définir le type de saisie d'un EditText de manière programmatique ? J'essaie :

mEdit.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);

cela ne semble pas avoir d'effet.

440voto

Amitku Points 1365

Pour définir le type de saisie d'un EditText de manière programmatique, vous devez spécifier que le type de classe de saisie est le texte.

editPass.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);

2 votes

Votre astuce a parfaitement fonctionné pour moi ! J'ai eu un problème similaire avec le paramétrage programmatique du type de saisie en multi-ligne.

0 votes

Quelle est la signification d'avoir un opérateur OR bitwise ici ? Désolé, je suis nouveau sur Android.

1 votes

Je ne suis pas d'accord avec InputType.TYPE_TEXT_VARIATION_PASSWORD qui ne fonctionne pas pour moi mais setTransformationMethod(PasswordTransformationMethod.getInstance()) ; le fait !

225voto

rascalking Points 1422

Selon le Docs TextView la version programmatique d'Android:password est la suivante setTransformationMethod() et non pas setInputType(). Donc quelque chose comme :

mEdit.setTransformationMethod(PasswordTransformationMethod.getInstance());

devrait faire l'affaire.

4 votes

Juste pour ajouter à cela, vous devez appeler setTransformationMethod au lieu de de setInputType. L'appel de setInputType après setTransformationMethod fait que l'EditText n'est plus en mode mot de passe.

13 votes

Cette réponse est fausse pour la question posée. Cela ne fait que transformer le texte saisi dans le champ EditText (remplace les caractères par les points du mot de passe). Cela n'a aucun effet sur ce qui est autorisé à être saisi dans le champ EditText lui-même.

4 votes

En définitive, setInputType appelle setTransformationMethod de l'intérieur, donc si vous passez le TYPE_TEXT_VARIATION_PASSWORD à setInputType, il le fera pour vous. Le problème semble provenir de l'appel de setSingleLine après l'appel de setInputType, qui appelle setTransformationMethod avec null ou le transformateur de ligne unique, ce qui efface le transformateur de mot de passe.

36voto

skinflint Points 71

J'ai tout résolu avec

.setInputType(InputType.TYPE_CLASS_NUMBER);

pour voir des données claires et

.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD);

pour voir les points (si la donnée est un nombre, ce n'est pas le choix che une autre classe)

0 votes

Cela a marché, merci ! Une question cependant, pourquoi dois-je ajouter 'ou' lorsque je passe du texte brut au type de mot de passe ? Pourquoi ne puis-je pas simplement faire ceci : .setInputType( InputType.TYPE_NUMBER_VARIATION_PASSWORD); ? J'ai essayé et cela n'a pas fonctionné.

19voto

dmmh Points 1124

Pour n'autoriser que les chiffres :

password1.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_CLASS_NUMBER);

Pour transformer (cacher) le mot de passe :

password1.setTransformationMethod(PasswordTransformationMethod.getInstance());

0voto

Jim Blackler Points 14306

Essayez d'ajouter ceci à la balise EditText/TextView dans votre mise en page

android:password="true"

Edit : Je viens de relire votre message, peut-être devez-vous faire cela après la construction. Je ne vois pas pourquoi votre extrait ne fonctionnerait pas.

0 votes

Je n'ai pas de fichier de mise en page dans ce cas, les champs sont générés par programme.

0 votes

Oui, c'est fait après la construction, je ne sais pas pourquoi ça ne marche pas non plus !

7 votes

Cette option est maintenant dépréciée !

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