Cómo cambiar entre ocultar y ver la contraseña

¿Existe alguna manera inteligente de permitir al usuario cambiar entre ocultar y ver la contraseña en un android EditText? Varias aplicaciones basadas en PC permiten al usuario hacer esto.

Puede cambiar dinámicamente los atributos de un TextView. Si configurara XML Atrribute android:password en true, la vista mostraría puntos si establece que el texto es falso.

Con el método setTransformationMethod , deberías poder cambiar estos atributos del código. (Descargo de responsabilidad: no he probado si el método aún funciona después de que se muestra la vista. Si tiene problemas con eso, déjeme un comentario para que lo sepa).

El código de muestra completo sería

 yourTextView.setTransformationMethod(new PasswordTransformationMethod()); 

para esconder la contraseña Para mostrar la contraseña, puede establecer uno de los métodos de transformación existentes o implementar un TransformationMethod vacío que no haga nada con el texto de entrada.

 yourTextView.setTransformationMethod(new DoNothingTransformation()); 

Es realmente fácil de lograr desde la Biblioteca de soporte v24.2.0.

Lo que debes hacer es simplemente:

  1. Agregue la biblioteca de diseño a sus dependencias

     dependencies { compile "com.android.support:design:24.2.0" } 
  2. Use TextInputEditText junto con TextInputLayout

        

¡El atributo passwordToggleEnabled hará el trabajo!

  1. En su diseño de raíz, no olvide agregar xmlns:app="http://schemas.android.com/apk/res-auto"

  2. Puedes personalizar tu contraseña al alternar usando:

app:passwordToggleDrawable – Drawable para usar como el ícono de alternancia de visibilidad de ingreso de contraseña.
app:passwordToggleTint – Ícono a usar para el alternar de visibilidad de ingreso de contraseña.
app:passwordToggleTintMode – Modo de fusión utilizado para aplicar el tinte de fondo.

Más detalles en la documentación de TextInputLayout .

enter image description here

Para mostrar los puntos en lugar de la contraseña, configure PasswordTransformationMethod:

 yourEditText.setTransformationMethod(new PasswordTransformationMethod()); 

por supuesto, puede configurar esto de forma predeterminada en su elemento de texto de edición en el diseño xml con

 android:password 

Para volver a mostrar la contraseña legible, solo pase null como método de transformación:

 yourEditText.setTransformationMethod(null); 

Mostrar:

 editText.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD); 

Esconder:

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

Después de cada uno de estos, el cursor se reinicia, entonces:

 editText.setSelection(editText.length()); 

Puede usar la aplicación: passwordToggleEnabled = “true”

aquí está el ejemplo dado a continuación

  

Use la checkbox y cambie el tipo de entrada en consecuencia.

 public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { int start,end; Log.i("inside checkbox chnge",""+isChecked); if(!isChecked){ start=passWordEditText.getSelectionStart(); end=passWordEditText.getSelectionEnd(); passWordEditText.setTransformationMethod(new PasswordTransformationMethod());; passWordEditText.setSelection(start,end); }else{ start=passWordEditText.getSelectionStart(); end=passWordEditText.getSelectionEnd(); passWordEditText.setTransformationMethod(null); passWordEditText.setSelection(start,end); } } 

Es trabajo para mí. Esto te ayudará definitivamente

 showpass.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if(!isChecked){ // show password password_login.setTransformationMethod(PasswordTransformationMethod.getInstance()); Log.i("checker", "true"); } else{ Log.i("checker", "false"); // hide password password_login.setTransformationMethod(HideReturnsTransformationMethod.getInstance()); } } }); 

Siento que quiero responder a esta pregunta, incluso hay algunas buenas respuestas,

de acuerdo con la documentación TransformationMethod hacer nuestra misión

TransformationMethod

TextView usa TransformationMethods para hacer cosas como reemplazar los caracteres de las contraseñas con puntos o evitar que los caracteres de nueva línea causen saltos de línea en los campos de texto de una sola línea.

Tenga en cuenta que uso un cuchillo de mantequilla, pero es lo mismo si la verificación del usuario muestra la contraseña

 @OnCheckedChanged(R.id.showpass) public void onChecked(boolean checked){ if(checked){ et_password.setTransformationMethod(null); }else { et_password.setTransformationMethod(new PasswordTransformationMethod()); } // cursor reset his position so we need set position to the end of text et_password.setSelection(et_password.getText().length()); } 

Puedo agregar el código de ShowPassword / HidePassword con solo unas líneas, autocontenido en un bloque:

 protected void onCreate(Bundle savedInstanceState) { ... etPassword = (EditText)findViewById(R.id.password); etPassword.setTransformationMethod(new PasswordTransformationMethod()); // Hide password initially checkBoxShowPwd = (CheckBox)findViewById(R.id.checkBoxShowPwd); checkBoxShowPwd.setText(getString(R.string.label_show_password)); // Hide initially, but prompting "Show Password" checkBoxShowPwd.setOnCheckedChangeListener( new CompoundButton.OnCheckedChangeListener() { public void onCheckedChanged(CompoundButton arg0, boolean isChecked) { if (isChecked) { etPassword.setTransformationMethod(null); // Show password when box checked checkBoxShowPwd.setText(getString(R.string.label_hide_password)); // Prompting "Hide Password" } else { etPassword.setTransformationMethod(new PasswordTransformationMethod()); // Hide password when box not checked checkBoxShowPwd.setText(getString(R.string.label_show_password)); // Prompting "Show Password" } } } ); ... 
 private int passwordNotVisible=1; @Override protected void onCreate(Bundle savedInstanceState) { showPassword = (ImageView) findViewById(R.id.show_password); showPassword.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { EditText paswword = (EditText) findViewById(R.id.Password); if (passwordNotVisible == 1) { paswword.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD); passwordNotVisible = 0; } else { paswword.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); passwordNotVisible = 1; } paswword.setSelection(paswword.length()); } }); } 

Puede MOSTRAR / OCULTAR contraseña usando el siguiente código:

CÓDIGO XML:

     

CÓDIGO JAVA:

 EditText mEtPwd; CheckBox mCbShowPwd; mEtPwd = (EditText) findViewById(R.id.etPassword); mCbShowPwd = (CheckBox) findViewById(R.id.cbShowPwd); mCbShowPwd.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override 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()); } } }); 
 private boolean isPasswordVisible; private TextInputEditText firstEditText; 

 firstEditText = findViewById(R.id.et_first); 

  private void togglePassVisability() { if (isPasswordVisible) { String pass = firstEditText.getText().toString(); firstEditText.setTransformationMethod(PasswordTransformationMethod.getInstance()); firstEditText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); firstEditText.setText(pass); firstEditText.setSelection(pass.length()); } else { String pass = firstEditText.getText().toString(); firstEditText.setTransformationMethod(HideReturnsTransformationMethod.getInstance()); firstEditText.setInputType(InputType.TYPE_CLASS_TEXT); firstEditText.setText(pass); firstEditText.setSelection(pass.length()); } isPasswordVisible= !isPasswordVisible; } 

¿Has probado con setTransformationMethod? Se hereda de TextView y quiere un TransformationMethod como parámetro.

Puede encontrar más acerca de TransformationMethods aquí .

También tiene algunas características geniales, como el reemplazo de personajes.

Pruebe el proyecto https://github.com/maksim88/PasswordEditText en github. Ni siquiera necesita cambiar su código Java usándolo. Solo cambia

Editar texto

etiqueta a

com.maksim88.passwordedittext.PasswordEditText

en tu archivo XML

Lo que hice fue

  1. Crear una vista de texto de edición y una vista de texto normal
  2. Haz que se superpongan entre sí mediante el diseño de restricción (al igual que la pantalla de inicio de sesión de la aplicación de Facebook)
  3. Adjunte un onClickListener a la vista de texto normal para que cambie el tipo de entrada de la vista de edición de texto en consecuencia (Visible / No visible)

Puede ver este video para obtener más detalles y explicaciones https://youtu.be/md3eVaRzdIM

Espero eso ayude 🙂

Aquí está mi solución sin utilizar TextInputEditText y el método de transformación.

XML

       

Código Java

 boolean VISIBLE_PASSWORD = false; //declare as global variable befor onCreate() loginPassword = (EditText)findViewById(R.id.loginPassword); loginPassword.setOnTouchListener(new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { final int DRAWABLE_LEFT = 0; final int DRAWABLE_TOP = 1; final int DRAWABLE_RIGHT = 2; final int DRAWABLE_BOTTOM = 3; if (event.getAction() == MotionEvent.ACTION_UP) { if (event.getRawX() >= (loginPassword.getRight() - loginPassword.getCompoundDrawables()[DRAWABLE_RIGHT].getBounds().width())) { // your action here //Helper.toast(LoginActivity.this, "Toggle visibility"); if (VISIBLE_PASSWORD) { VISIBLE_PASSWORD = false; loginPassword.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); loginPassword.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_lock_outline_black_24dp, 0, R.drawable.ic_visibility_off_black_24dp, 0); } else { VISIBLE_PASSWORD = true; loginPassword.setInputType(InputType.TYPE_CLASS_TEXT); loginPassword.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_lock_outline_black_24dp, 0, R.drawable.ic_visibility_black_24dp, 0); } return false; } } return false; } }); 

comstackr ‘com.android.support:appcompat-v7:24.2.0’

compile ‘com.android.support:design:24.2.0’

en diseño

  android:inputType="textPassword" 

Esta funcionando

En XML haz esto

       boolean show=true; //on image click inside password do this if(show){ imgshowhide2.setBackgroundResource(0); imgshowhide2.setBackgroundResource(R.drawable.hide); etpass2.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD); etpass2.setSelection(etpass2.getText().length()); show=false; }else{ imgshowhide2.setBackgroundResource(0); imgshowhide2.setBackgroundResource(R.drawable.showpass); //etpass1.setInputType(InputType.TYPE_TEXT); etpass2.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); etpass2.setSelection(etpass2.getText().length()); show=true; } 
 if (inputPassword.getTransformationMethod() == PasswordTransformationMethod.getInstance()) { //password is visible inputPassword.setTransformationMethod(HideReturnsTransformationMethod.getInstance()); } else if(inputPassword.getTransformationMethod() == HideReturnsTransformationMethod.getInstance()) { //password is hidden inputPassword.setTransformationMethod(PasswordTransformationMethod.getInstance()); }