web-dev-qa-db-fra.com

Afficher le mot de passe avec EditText

J'utilise un EditText pour entrer le mot de passe . Et une case à cocher pour afficher le mot de passe ou non . La fonction ci-dessous est la partie:

public void ShowPassword() {
    if (cb.isChecked()) {
        password.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
    } else {
        password.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
    }
}

Quand il est coché, il affiche le mot de passe . Mais quand il n'est pas coché, il montre les étoiles . Comment le modifier pour afficher le nombre d'étoiles alors que la cb n'est pas cochée?

28
brian

Je ne connais pas exactement les détails, mais ce code devrait fonctionner:

checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if(!isChecked) {
                    password.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);
                } else {
                    password.setInputType(129);
                }
            }
        });

129 est le type d'entrée défini lors du paramétrage de Android:inputType="textPassword"

modifier:

comme mentionné dans la réponse de @ user370305, 129 est la valeur du bit ou de l'opération lorsque

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

Ce n'est pas une réponse,

Réponse déjà donnée et acceptée ..

Je veux juste clarifier à propos de 129

password.setInputType(129);

est en fait,

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

'|' n'est pas un tuyau , c'est un bitwise OR. Il faut deux nombres binaires et si l’un des bits de valeur égale est 1,

En quoi cela concerne-t-il le type d'entrée? Chacun des InputTypes est en fait juste un élément TYPE_CLASS_TEXT is 1, et TYPE_TEXT_VARIATION_PASSWORD is 128 (or 10000000).

Effectuez un bitwise OR sur eux:

00000001

10000000

------------

10000001 which is 129.

Essayez d'entrer input.setInputType(129); à la place, vous verrez que ça va marcher. :)

46
user370305

Je pense que vous utilisez la mauvaise fonction. Je fais cela et travaille parfaitement:

passwordEditView = (EditText) rootView.findViewById(R.id.password);
final CheckBox showPasswordCheckBox = (CheckBox) rootView.findViewById(R.id.checkbox);
showPasswordCheckBox.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        if (showPasswordCheckBox.isChecked()){
            passwordEditView.setTransformationMethod(null);
        }else{
            passwordEditView.setTransformationMethod(new PasswordTransformationMethod());
       }
    }
});
15
JoseF

Cela pourrait vous aider mate

checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {

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

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

Pour que cela fonctionne, définissez un type de mot de passe inputType sur la variable TextInputEditText. Voici comment faire cela:

<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>
3
moyheen

use app: passwordToggleEnabled = true; disponible à partir de la bibliothèque de support Android version 24.2.0.

  <Android.support.design.widget.TextInputLayout
    Android:id="@+id/input_layout_password"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:visibility="gone"
    app:passwordToggleEnabled="true"
    tools:visibility="visible"
    Android:layout_marginBottom="@dimen/space_medium">

    <Android.support.design.widget.TextInputEditText
        Android:id="@+id/input_password"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:inputType="textPassword"
        Android:imeOptions="actionDone"
        Android:imeActionLabel="@string/btn_sign_in"
        Android:hint="@string/hint_password" />

</Android.support.design.widget.TextInputLayout>
2
Deep P

au lieu d'un mot de passe visible, pouvez-vous essayer avec TYPE_TEXT_VARIATION_NORMAL

public void ShowPassword() {
password.setInputType((cb.isChecked()) ? 
InputType.TYPE_TEXT_VARIATION_NORMAL : InputType.TYPE_TEXT_VARIATION_PASSWORD;
}
2
waqaslam

Cela fonctionnera - 

public void ShowPassword() {
    if (cb.isChecked()) {
        password.setInputType(InputType.TYPE_CLASS_TEXT);
    } else {
        password.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
    }
}
1
Varad Mondkar

Appelez cette méthode dans votre OnCheckedChangedListener

 public static void toggleShowPassword(boolean show, EditText editText) {
    if (show)
        editText.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
    else
        editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
    editText.setSelection(editText.length());
}

Le curseur EditText réinitialise sa position après avoir modifié la InputType c'est pourquoi nous ajoutons la dernière ligne editText.setSelection(editText.length())

1
Silvia H

si vous utilisez Xamarin (Visual Studio Mac, comme on l'appelle maintenant), vous pouvez le réaliser de cette manière (j'ai utilisé un commutateur).

 /// <summary>
 /// Toggles the password.
 /// </summary>
 /// <param name="field">Field.</param>
 /// <param name="isChecked">If set to <c>true</c> is checked.</param>
 private void TogglePassword(TextView field, bool isChecked)
 {
      /// masks with password character
      if (isChecked)
      {
           field.TransformationMethod = new PasswordTransformationMethod();
      }
      /// unmasks password
      else
      {
           field.TransformationMethod = null;
      }

Ensuite, sur votre commutateur, cliquez sur quelque chose comme ça

switch.Click += delegate {
            TogglePassword(textView, switch.Checked);
        };
0
ondrovic