Par programme changer le type d'entrée de l'EditText de MOT de passe pour NORMAL et vice-versa

dans mon application, j'ai un EditText dont le type d'entrée par défaut est défini à android:inputType="textPassword" par deault. Il a un CheckBox à sa droite, ce qui, une fois vérifié, change le type d'entrée de ce texte édité en texte normal. Le Code pour cela est

password.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);

mon problème est, quand cette case à cocher n'est pas cochée, il devrait à nouveau définir le type d'entrée à mot de passe. Je l'ai fait en utilisant-

password.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);

mais, le texte à l'intérieur de ce texte est toujours visible. Et pour surprise, quand je change l'orientation, il règle automatiquement le type d'entrée au mot de passe et le texte à l'intérieur est mis en Puce (montré comme un mot de passe).

comment y parvenir?

145
demandé sur Azat Ibrakov 2012-03-27 19:26:23

21 réponses

Juste pour les gens qui ont le même problème. Il suffit d'ajouter un attribut supplémentaire à cette EditText programmatically et vous êtes fait.

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

Aussi, assurez-vous que le curseur est à la fin du texte, dans l'EditText. Parce que, lorsque vous changez le type d'entrée, le curseur sera automatiquement positionné 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());

lors de L'utilisation de Data Binding, vous peut 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

254
répondu Rajkiran 2018-09-20 10:29:26

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) {
                        // show password
                    mEtPwd.setTransformationMethod(PasswordTransformationMethod.getInstance());
                } else {
                        // hide password
                    mEtPwd.setTransformationMethod(HideReturnsTransformationMethod.getInstance());
                }
            }
        });

pour le code d'échantillon complet, référez-vous à http://www.codeproject.com/Tips/518641/Show-hide-password-in-a-edit-text-view-password-ty

49
répondu neeraj t 2013-12-26 07:40:21
password.setInputType(InputType.TYPE_CLASS_TEXT | inputType.TYPE_TEXT_VARIATION_PASSWORD);
La méthode

ci-dessus n'a pas vraiment fonctionné pour moi. Réponse ci-dessous fonctionne pour sdk 2.2.

mot de passe.setTransformationMethod (PasswordTransformationMethod.getInstance ());

Set inputType pour un EditText?

15
répondu ymutlu 2017-05-23 12:26:32

un autre exemple simple utilisant ImageView pour basculer la visibilité avec moins de code, en raison de l'unique InputType assign we need only equality operator:" 15198090920"

EditText inputPassword = (EditText) findViewById(R.id.loginPassword);
ImageView inputPasswordShow = (ImageView) findViewById(R.id.imagePasswordShow);
inputPasswordShow.setOnClickListener(new View.OnClickListener() {
     @Override
     public void onClick(View view) {
         if(inputPassword.getInputType() == InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD) {
              inputPassword.setInputType( InputType.TYPE_CLASS_TEXT |
                                        InputType.TYPE_TEXT_VARIATION_PASSWORD);
         }else {
              inputPassword.setInputType( InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD );
         }
         inputPassword.setSelection(inputPassword.getText().length());
    }
});

remplaçant:

InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD

avec:

InputType.TYPE_CLASS_TEXT

donnera le même résultat mais le mot plus court.

12
répondu Roman Polen. 2015-06-09 15:06:00
Checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener() {

            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                // checkbox status is checked.
                if (isChecked) {
                        //password is visible
 PasswordField.setTransformationMethod(HideReturnsTransformationMethod.getInstance());     
                } else {
                        //password gets hided
             passwordField.setTransformationMethod(PasswordTransformationMethod.getInstance());       
                }
            }
        });
10
répondu G murali Madhav 2015-12-09 06:30:07

cela a fonctionné pour moi:

mytext.setInputType(InputType.TYPE_CLASS_NUMBER);
5
répondu mav_baumer15 2012-11-08 15:44:58

Ok donc après des heures d'essai finalement mis en œuvre. Ci-dessous est le code ..

  buttons.get(2).setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View view) {
       if(buttons.get(2).getText().toString().equalsIgnoreCase(getResources().getString(R.string.show))){
           editTexts.get(1).setInputType(InputType.TYPE_CLASS_TEXT);
           editTexts.get(1).setSelection(editTexts.get(1).getText().length());
           buttons.get(2).setText(getResources().getString(R.string.hide));
        }else{
           editTexts.get(1).setInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_VARIATION_PASSWORD);
           //editTexts.get(1).setTransformationMethod(PasswordTransformationMethod.getInstance());
           editTexts.get(1).setSelection(editTexts.get(1).getText().length());
           buttons.get(2).setText(getResources().getString(R.string.show));
       }

    }
});

explications:- j'ai un bouton avec le texte par défaut comme afficher. Après l'événement onclick sur elle en vérifiant si le texte du bouton est affiché. S'il s'agit de show,changez le type d'entrée, ajustez la position du curseur et définissez new text comme hide in it.

quand c'est de la peau... faire marche arrière, c'est-à-dire cacher le mot de passe,régler le curseur et définir le texte comme spectacle. Et c'est tout. Il se porte comme un charme.

5
répondu Debasish Ghosh 2017-11-08 12:27:35

pour les utilisateurs de kotlin:

password.inputType = InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_PASSWORD
4
répondu Elisabeth Whiteley 2018-08-14 12:17:24

utilisez ce code pour changer le mot de passe en texte et vice versa. Ce code a parfaitement fonctionné pour moi. Essayez ceci..

EditText paswrd=(EditText)view.findViewById(R.id.paswrd);

CheckBox showpass=(CheckBox)view.findViewById(R.id.showpass);
showpass.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
    if(((CheckBox)v).isChecked()){
        paswrd.setInputType(InputType.TYPE_CLASS_TEXT);

    }else{
        paswrd.setInputType(InputType.TYPE_CLASS_TEXT|InputType.TYPE_TEXT_VARIATION_PASSWORD);
    }

}
});
3
répondu Surya 2015-02-19 04:46:10

la fonctionnalité de bascule de visibilité de mot de passe a été ajoutée pour prendre en charge la version 24.2.0 de la bibliothèque vous permettant de bascule le mot de passe directement à partir du EditText sans avoir besoin d'un CheckBox .

vous pouvez faire ce travail essentiellement en mettant d'abord à jour votre version de bibliothèque de soutien à 24.2.0 et en mettant ensuite un inputType de mot de passe sur le TextInputEditText . Voici comment faire:

<android.support.design.widget.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <android.support.design.widget.TextInputEditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="@string/password"
            android:inputType="textPassword"/>
</android.support.design.widget.TextInputLayout>

vous pouvez obtenir plus d'information sur le nouvelle fonctionnalité sur la documentation du développeur pour TextInputLayout .

3
répondu moyheen 2016-08-22 10:00:20

c'est le handler onClick complet pour le bouton Image/pour afficher/cacher le mot de passe.

    new OnClickListener() {
        @Override
        public void onClick(View v) {
            // current ursor position
            int cursorPosition = edtPassword.getSelectionStart();

            // toggles the control variable
            isPassworsVisible = !isPassworsVisible;

            // sets the image toggler inside edit text
            passwordVisible.setImageDrawable(getResources().getDrawable(isPassworsVisible ? R.drawable.ic_eye_checked : R.drawable.ic_eye_unchecked));

            // apply input type
            edtPassword.setInputType(isPassworsVisible ? InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD : InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);

            // returns cursor to position
            edtPassword.setSelection(cursorPosition);
        }
    };
2
répondu Everton Fernandes Rosario 2015-01-22 14:23:04

ma recherche d'une solution similaire pour Visual Studio / Xamarin m'a conduit à ce fil. Voici ce qui a fonctionné pour moi avec Xamarin. Notez que cette implémentation conserve le drapeau TYPE_TEXT_FLAG_NO_SUGGESTIONS lors de la commutation entre les modes.

EditText et = FindViewById<EditText>(Resource.Id.ET);

pour afficher les caractères: et.InputType = Android.Text.InputTypes.TextVariationVisiblePassword | Android.Text.InputTypes.TextFlagNoSuggestions;

pour cacher les caractères: et.InputType = Android.Text.InputTypes.TextVariationPassword | Android.Text.InputTypes.ClassText;

pour régler la position de fin: int position = et.Text.Length; et.SetSelection(position, position);

2
répondu Tony 2016-09-02 12:49:30

dynamique de la situation holder.edit_pin.setInputType(InputType.TYPE_CLASS_NUMBER); ne fonctionne pas alors il vaut mieux utiliser à la fois comme

holder.edit_pin.setInputType(InputType.TYPE_CLASS_NUMBER);
holder.edit_pin.setTransformationMethod(PasswordTransformationMethod.getInstance());

Note : Ceci est adapté pour quand vous utilisez des commandes dynamiques comme l'utilisation de arrayaapter

2
répondu Issac Balaji 2016-09-26 22:13:18

depuis la bibliothèque V24.2.0. vous pouvez y arriver très facilement

ce que vous devez faire est juste:

  1. Ajouter à la bibliothèque de conception pour votre avec des dépendances

    dependencies {
         compile "com.android.support:design:25.1.0"
    }
    
  2. utiliser TextInputEditText en conjonction avec TextInputLayout

    <android.support.design.widget.TextInputLayout
        android:id="@+id/etPasswordLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:passwordToggleEnabled="true">
    
        <android.support.design.widget.TextInputEditText
            android:id="@+id/etPassword"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="@string/password_hint"
            android:inputType="textPassword"/>
    </android.support.design.widget.TextInputLayout>
    

passwordToggleEnabled attribut fera apparaître la bascule de mot de passe

  1. N'oubliez pas d'ajouter xmlns:app="http://schemas.android.com/apk/res-auto"

  2. vous pouvez personnaliser votre bascule de mot de passe en utilisant:

app:passwordToggleDrawable - il peut être utilisé comme icône de bascule de visibilité d'entrée de mot de passe.

app:passwordToggleTint - icône à utiliser pour la bascule de visibilité d'entrée de mot de passe.

app:passwordToggleTintMode - mélange mode utilisé pour appliquer la teinte de fond.

plus de détails dans TextInputLayout documentation . enter image description here

2
répondu Javier Vieira 2016-12-15 14:40:23

je change le type d'entrée sur ma case à cocher, donc sur mon OnCheckedChangeListener je fais:

passwordEdit.setInputType(InputType.TYPE_CLASS_TEXT| (isChecked? InputType.TYPE_TEXT_VARIATION_PASSWORD|~InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD : InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD));

et ça a finalement marché.

semble être un problème booléen avec TYPE_TEXT_VARIATION_VISIBLE_PASSWORD . Inversez le drapeau et ça devrait régler le problème.

dans votre cas:

password.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD|~InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
1
répondu Gugadin 2017-01-11 20:10:41

je supprimerais android:inputType="textPassword" de votre mise en page. C'est la raison pour laquelle il est de revenir au mot de passe lorsque l'orientation change. Parce que chaque fois que l'orientation change, la vue est recréée.

comme pour le premier problème essayez ceci:

String text = password.getText();
password.setText("");
password.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
password.setText(text);

fondamentalement, vider le texte avant de changer le type d'entrée, puis l'ajouter.

0
répondu bytebender 2012-03-27 15:36:36

juste un commentaire supplémentaire sur la bonne réponse fournie par @Rajkiran, vous pouvez ajouter

etPassword.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);

à l'état d'entrée NORMAL de sorte que les utilisateurs ne seront pas ennuyés par l'Auto-suggestion du clavier

0
répondu Z.J. Cong 2015-02-09 12:38:39

code complet lorsque vous voulez appliquer la visibilité du mot de passe dans le mot de passe modifier le texte.

créer une poignée [N'importe quelle tirette ou case à cocher]

, cliquez sur ou sur Cochée/Décocher écrire ceci:

 if (edittext.getInputType() == (InputType.TYPE_CLASS_TEXT |
                    InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD )){

                edittext.setInputType(InputType.TYPE_CLASS_TEXT |
                        InputType.TYPE_TEXT_VARIATION_PASSWORD );
            }else{
                edittext.setInputType(InputType.TYPE_CLASS_TEXT |
                        InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD );
            }

n'oubliez pas d'écrire cette ligne:

 edittext.setSelection(edittext.getText().length());

Il remet le curseur à la fin de la ligne.

0
répondu sud007 2015-04-10 10:02:12

Blockquote

final int[] table = {0};

    showandhide.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            if(count[0] ==0)
            {
                password.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
                count[0]++;
            }
            else {

                password.setInputType(InputType.TYPE_CLASS_TEXT |
                        InputType.TYPE_TEXT_VARIATION_PASSWORD);
                showandhide.setText("Hide");
                count[0]--;
            }

        }
    });
0
répondu gattamaneni venkatanarasimham 2016-06-29 11:56:02

basé sur les réponses de neeraj t et Everton Fernandes Rosario j'ai écrit dans Kotlin, où password est un id D'un texte D'édition dans votre mise en page.

// Show passwords' symbols.
private fun showPassword() {
    password.run {
        val cursorPosition = selectionStart
        transformationMethod = HideReturnsTransformationMethod.getInstance()
        setSelection(cursorPosition)
    }
}

// Show asterisks.
private fun hidePassword() {
    password.run {
        val cursorPosition = selectionStart
        transformationMethod = PasswordTransformationMethod.getInstance()
        setSelection(cursorPosition)
    }
}
0
répondu CoolMind 2018-09-20 08:12:46

après setInputType pour un champ de mot de passe, vous aurez problème avec FONT

Voici ma solution pour afficher / cacher le mot de passe sans problème de police

protected void onCreate(Bundle savedInstanceState) {
    ...
    findViewById(R.id.button_show_hide_password).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (isPasswordVisible(edtPassword)) {
                enableInputHiddenPassword(edtPassword);
            } else {
                enableInputVisiblePassword(edtPassword);
            }
            edtPassword.setSelection(edtPassword.getText().length());
        }
    });
}

final int INPUT_TYPE_VISIBLE_PASSWORD = InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD;
final int INPUT_TYPE_HIDDEN_PASSWORD = InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD;

private boolean isPasswordVisible(EditText editText) {
    return editText.getInputType() == INPUT_TYPE_VISIBLE_PASSWORD;
}

private void enableInputVisiblePassword(EditText editText) {
    Typeface cache = editText.getTypeface();
    editText.setInputType(INPUT_TYPE_VISIBLE_PASSWORD);
    editText.setTypeface(cache);
}

private void enableInputHiddenPassword(EditText editText) {
    Typeface cache = editText.getTypeface();
    editText.setInputType(INPUT_TYPE_HIDDEN_PASSWORD);
    editText.setTypeface(cache);
}

Note: j'utilise InputType.TYPE_TEXT_VARIATION_PASSWORD au lieu de InputType.TYPE_CLASS_TEXT ou HideReturnsTransformationMethod parce que je veux que le clavier affiche à la fois le texte et le numéro

DÉMO

0
répondu Phan Van Linh 2018-09-20 09:15:11