Pregunta Mostrar la contraseña con EditText


Yo uso un EditText para ingresar la contraseña. Y un CheckBox para mostrar la contraseña o no. Debajo la función es la parte:

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

Cuando marcó, muestra la contraseña. Pero cuando no se verifica, muestra estrellas. ¿Cómo modificarlo para mostrar la estrella mientras el cb no está marcado?


27
2018-02-16 08:14


origen


Respuestas:


No sé exactamente los detalles, pero este código debería funcionar:

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 es el tipo de entrada establecido al configurar android:inputType="textPassword"

editar:

como se menciona en la respuesta de @ user370305, 129 es el valor de la operación a nivel de bit cuando lo haces

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

56
2018-02-16 08:33



Esta no es una respuesta,

Respuesta ya dada y aceptada ..

Solo quiero aclarar sobre 129

password.setInputType(129);

es en realidad,

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

'|' no es un tubo, es un bitwise OR. Toma dos números binarios y si cualquiera de los bits de igual valor es 1,

Cómo se relaciona esto con el tipo de entrada: cada uno de los InputTypes son realmente solo entradas. TYPE_CLASS_TEXT is 1y TYPE_TEXT_VARIATION_PASSWORD is 128 (or 10000000).

Realice un bitwise OR en ellos:

00000001

10000000

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

10000001 which is 129.

Prueba ingresar input.setInputType(129); en cambio, verás que funcionará. :)


44
2018-02-16 09:12



Creo que estás usando la función incorrecta. Lo hago de esa manera y trabajo perfectamente:

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
2017-10-01 18:40



Esto podría ayudarte a aparearse

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
2017-09-02 10:07



La característica de Alternar visibilidad de contraseña se ha agregado para admitir la versión 24.2.0 de la biblioteca que le permite alternar la contraseña directamente desde el campo de contraseña sin la necesidad de un CheckBox.

Puede hacer que eso funcione básicamente estableciendo un inputType de contraseña en el TextInputEditText. He aquí cómo hacerlo:

<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
2017-08-22 09:35



en lugar de la contraseña visible, ¿puedes probar con TYPE_TEXT_VARIATION_NORMAL?

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

2
2018-02-16 08:25



Llame a este método dentro de su 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());
}

los EditText cursor restablece su posición después de cambiar el InputType es por eso que agregamos la última línea editText.setSelection(editText.length())


1
2018-02-16 16:05



usar la aplicación: passwordToggleEnabled = true; disponible desde la biblioteca de soporte de Android versión 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>

1
2018-05-01 00:03



Esto funcionará -

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
2017-11-01 19:28



en caso de que estés usando Xamarin (Visual Studio Mac como se llama ahora) puedes lograrlo de esta manera (utilicé un Switch)

 /// <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;
      }

Luego, en su Switch .click haga algo como esto

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

0
2018-06-29 21:52