219 votes

Changement programmé du type de saisie de l'EditText de PASSWORD à NORMAL et vice versa.

Dans mon application, j'ai un EditText dont le type d'entrée par défaut est fixé à android:inputType="textPassword" par défaut. Il dispose d'un CheckBox à sa droite, qui, lorsqu'elle est cochée, change le type de saisie de cet EditText en TEXTE NORMAL PLAIN. Le code pour cela est

password.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);

Mon problème est que, lorsque cette case à cocher n'est pas cochée, le type d'entrée doit à nouveau être défini comme un mot de passe. Je l'ai fait en utilisant

password.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);

Mais, le texte à l'intérieur de cet edittext est toujours visible. Et, surprise, lorsque je change l'orientation, le type d'entrée devient automatiquement PASSWORD et le texte à l'intérieur est à puces (affiché comme un mot de passe).

Y a-t-il un moyen d'y parvenir ?

0 votes

Comment définir le type d'email pour le texte d'édition mailEdt.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS) ; ne semble pas fonctionner.

5 votes

Utilisez mailEdt.setInputType(InputType.TYPE_CLASS_TEXT|InputType.TYP‌​E_TEXT_VARIATION_EMA‌​IL_ADDRESS); . Cela fonctionne pour moi.

403voto

Rajkiran Points 2354

Ajoutez-y un attribut supplémentaire EditText de manière programmatique et vous avez terminé :

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

Pour le mot de passe numérique (pin) :

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

De plus, assurez-vous que le curseur se trouve à la fin du texte dans le champ EditText car lorsque vous changez de type d'entrée, le curseur est automatiquement placé au point de départ. Je suggère donc d'utiliser le code suivant :

et_password.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
et_password.setSelection(et_password.getText().length());

Lorsque vous utilisez Data Binding, vous pouvez utiliser le code suivant :

<data>
        <import type="android.text.InputType"/>
.
.
.
<EditText
android:inputType='@{someViewModel.isMasked ? 
(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD) :
InputType.TYPE_CLASS_TEXT }'

Si vous utilisez Kotlin :

password.inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_PASSWORD

2 votes

Comme indiqué pour la bonne réponse - au lieu de modifier la sélection, vous pouvez utiliser InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD

23 votes

Je ne comprends pas pourquoi Android choisit de déplacer le curseur, cela rend la vie des développeurs beaucoup plus difficile.

3 votes

+1 car ici, c'est meilleure réponse

66voto

neeraj t Points 1309

Utilisez ce code pour changer le mot de passe en texte et vice versa

mCbShowPwd.setOnCheckedChangeListener(new OnCheckedChangeListener() {

            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                // checkbox status is changed from uncheck to checked.
                if (!isChecked) {
                        // hide password
                    mEtPwd.setTransformationMethod(PasswordTransformationMethod.getInstance());
                } else {
                        // show password
                    mEtPwd.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
                }
            }
        });

Pour le code complet de l'exemple, voir http://www.codeproject.com/Tips/518641/Show-hide-password-in-a-edit-text-view-password-ty

7 votes

HideReturnsTransformationMethod.getInstance() a montré le mot de passe, et PasswordTransformationMethod.getInstance() a caché le mot de passe ... la mise en œuvre est correcte mais les commentaires sont inversés.

3 votes

C'est la meilleure réponse, pour la compléter, il suffit de déplacer le curseur sur le dernier caractère avec : txtpassword.setSelection(txtpassword.getText().length()) ;

0 votes

Pendant un moment, il semble ne pas fonctionner en raison du point souligné par EL-conte De-monte TereBentikh. La suggestion de Josh est également utile. C'est la meilleure réponse.

36voto

Bill Gary Points 2638

Vérifiez cette vidéo . Il utilise une boîte à bascule pour activer et désactiver la saisie du mot de passe, mais il serait facile de la remplacer par une case à cocher.

17voto

ymutlu Points 1923
password.setInputType(InputType.TYPE_CLASS_TEXT | inputType.TYPE_TEXT_VARIATION_PASSWORD);

La méthode ci-dessus n'a pas vraiment fonctionné pour moi. La réponse ci-dessous fonctionne pour le sdk 2.2.

password.setTransformationMethod(PasswordTransformationMethod.getInstance()) ;

Définir le type d'entrée pour un EditText ?

6voto

mav_baumer15 Points 83

Cela a marché pour moi :

mytext.setInputType(InputType.TYPE_CLASS_NUMBER);

0 votes

Veuillez d'abord lire la question. Je veux basculer entre le champ de mot de passe et le champ de texte. Cela me donnera un champ de texte numérique.

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