¿Existe alguna manera inteligente de permitir al usuario cambiar entre ocultar y ver la contraseña en un androide EditText? Varias aplicaciones basadas en PC permiten al usuario hacer esto.Cómo cambiar entre ocultar y ver la contraseña
Respuesta
Puede cambiar dinámicamente los atributos de un TextView. Si configurara XML Atrribute android:password
como verdadero, la vista mostraría puntos si establece que el texto es falso.
Con el método setTransformationMethod debería poder cambiar estos atributos del código. (Negación:.. No he probado si el método sigue funcionando después de que se muestre la vista Si tiene problemas con eso me deja un comentario para que yo sepa)
El código de ejemplo completo sería
yourTextView.setTransformationMethod(new PasswordTransformationMethod());
para ocultar 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 hace nada con el texto de entrada.
yourTextView.setTransformationMethod(new DoNothingTransformation());
¿Has probado con setTransformationMethod? Se hereda de TextView y quiere un TransformationMethod como parámetro.
Puede encontrar más información sobre TransformationMethods here.
También tiene algunas características geniales, como la sustitución de personajes.
Enlace en respuesta está muerto - * "Código de estado: 404 Not Found" *. – Pang
Para mostrar los puntos en lugar de la contraseña establecida la PasswordTransformationMethod:
yourEditText.setTransformationMethod(new PasswordTransformationMethod());
, por supuesto, se puede establecer esto por defecto en su elemento EditarTexto en el diseño xml con
android:password
Para volver a mostrar la contraseña legible, simplemente pase null como método de transformación:
yourEditText.setTransformationMethod(null);
' android: password' está en desuso ahora, y debe usar 'android: inputType' en su lugar. – Wilka
También puede hacer felices a sus usuarios guardando la posición del cursor antes de configurar el método de transformación y restaurarlo después. Use' editText.getSelectionStart () 'y' editText.getSelectionEnd() 'para guardar la posición del cursor y' editText.setSelection (start, end) 'para restaurarlo – Mostafa
@Wilka: android: inputType NO le permite alternar entre los dos estados en ejecución -tiempo. Solo te permite cambiar una vez y una vez que lo cambias, no puedes volver a cambiarlo. Y no, el setTransformationMethod NO está en desuso. – AndroidDev
Para mostrar:
editText.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);
Para ocultar:
editText.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
Después de cada una de ellas el cursor se pone a cero, por lo que:
editText.setSelection(editText.length());
Probado en Android 4.3 y 5.0, ¡funciona genial! Los documentos hacen que parezca que esto debería funcionar hasta API 3. – James
@MattLogan, pero ¿cómo mostrar/ocultar las teclas en el teclado? – NarendraJi
Esta debería ser la respuesta aceptada –
Uso casilla de verificación y cambiar el tipo de entrada según corresponda .
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);
}
}
Funcionó como un encanto gracias :) –
Es trabajo para mí.Esto le 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 aún hay algunas buenas respuestas,
según la documentación TransformationMethod hacer nuestra misión
TransformationMethod
TextView utiliza TransformationMethods para hacer cosas como reemplazar el caracteres de contraseñas con puntos, o evitar que los caracteres de nueva línea causen saltos de línea en campos de texto de una sola línea.
Aviso utilizo cuchillo de mantequilla, pero es el mismo si el usuario verificación Mostrar 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());
}
soy capaz de añadir el código/HidePassword ShowPassword con sólo unas pocas líneas, auto-contenida 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"
}
}
});
...
Probar https://github.com/maksim88/PasswordEditText proyecto en github. Ni siquiera necesita cambiar su código Java usándolo. Sólo cambia
EditarTexto
etiqueta para
com.maksim88.passwordedittext.PasswordEditText
en el archivo XML.
¿Tiene alguna idea de cómo usar setError con este componente, una vez que el error está marcado, el icono de mostrar/ocultar se vuelve invisible – guisantogui
Es realmente fácil de conseguir desde la Biblioteca de soporte v24.2.0.
Lo que hay que hacer es:
Agregar la biblioteca de diseño a sus dependecies
dependencies { compile "com.android.support:design:24.2.0" }
Uso
TextInputEditText
conjuntamente conTextInputLayout
<android.support.design.widget.TextInputLayout android:id="@+id/etPasswordLayout" android:layout_width="match_parent" android:layout_height="wrap_content" app:passwordToggleEnabled="true" android:layout_marginBottom="@dimen/login_spacing_bottom"> <android.support.design.widget.TextInputEditText android:id="@+id/etPassword" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/fragment_login_password_hint" android:inputType="textPassword"/> </android.support.design.widget.TextInputLayout>
¡El atributo passwordToggleEnabled
hará el trabajo!
En su diseño raíz no se olvide de añadir
xmlns:app="http://schemas.android.com/apk/res-auto"
puede personalizar sus palanca contraseña mediante:
app:passwordToggleDrawable
- Disponibles a utilizar como el icono de alternancia de visibilidad de entrada de contraseña.
app:passwordToggleTint
- Icono que se utiliza para el alternar de visibilidad de entrada de contraseña.
app:passwordToggleTintMode
- Modo de fusión utilizado para aplicar el tinte de fondo.
Más detalles en TextInputLayout documentation.
En la versión 25.1.0 tengo un comportamiento raro: muestra la contraseña alternar una vez, pero si lo presiona, desaparecerá o_O ' – MiguelHincapieC
Sí, también hay algunos caprichos con el atributo 'android: text' en' TextInputEditText'. Siempre puede plantear un problema en [Google Issues Tracker para Android] (https://code.google.com/p/android/issues/list) – mmBs
¿Hay alguna forma de mover el icono hacia la izquierda? –
Lo que hice fue
- Crear una vista de edición de texto y una vista de texto normal
- Hacer ellas se superponen entre sí mediante el uso de diseño restricción (al igual pantalla de la aplicación de inicio de sesión de Facebook)
- Adjunte un onClickListener a la vista de texto normal para que cambie el tipo de entrada de la vista de texto de edición en consecuencia (Visible/No visible)
Es posible que echa un vistazo a este video para un pasos más detallados y explicaciones https://youtu.be/md3eVaRzdIM
espero que ayude :)
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());
}
});
}
es posible mostrar/contraseña OCULTAR usar este código a continuación:
CÓDIGO XML:
<EditText
android:id="@+id/etPassword"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="21dp"
android:layout_marginTop="14dp"
android:ems="10"
android:inputType="textPassword" >
<requestFocus />
</EditText>
<CheckBox
android:id="@+id/cbShowPwd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/etPassword"
android:layout_below="@+id/etPassword"
android:text="@string/show_pwd" />
JAVA CÓDIGO:
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());
}
}
});
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());
}
Puede usar aplicación: passwordToggleEnabled = "true"
aquí es ejemplo dado a continuación
<android.support.design.widget.TextInputLayout
android:id="@+id/password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:passwordToggleEnabled="true"
android:textColorHint="@color/colorhint"
android:textColor="@color/colortext">
Aquí está mi solución sin utilizar TextInputEditText y Método de transformación
XML
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
style="@style/FormLabel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/username" />
<EditText
android:id="@+id/loginUsername"
style="@style/EditTextStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawableLeft="@drawable/ic_person_outline_black_24dp"
android:drawableStart="@drawable/ic_person_outline_black_24dp"
android:inputType="textEmailAddress"
android:textColor="@color/black" />
<TextView
style="@style/FormLabel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:text="@string/password" />
<EditText
android:id="@+id/loginPassword"
style="@style/EditTextStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawableEnd="@drawable/ic_visibility_off_black_24dp"
android:drawableLeft="@drawable/ic_lock_outline_black_24dp"
android:drawableRight="@drawable/ic_visibility_off_black_24dp"
android:drawableStart="@drawable/ic_lock_outline_black_24dp"
android:inputType="textPassword"
android:textColor="@color/black" />
</LinearLayout>
Código de 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;
}
});
compilación 'com.android.support:appcompat-v7:24.2.0'
compilación ' com.android.support:design:24.2.0 '
en la disposición
android:inputType="textPassword"
Su trabajo
- 1. Ocultar contraseña/cifrar en el archivo bash para dejar de ver accidentalmente
- 2. Liferay - personalizar cambiar contraseña
- 3. Rails 3 Diseñar cambiar manualmente la contraseña
- 4. ¿Cómo cambiar manualmente la contraseña en la membresía de asp.net?
- 5. Cambiar la contraseña de root del script
- 6. ¿Diferencia de control entre Ocultar() y Visible?
- 7. ¿Cómo cambiar entre DataGridViewTextBoxCell y DataGridViewComboBoxCell?
- 8. Cambiar contraseña SSH en Git
- 9. Reportlab: ¿Cómo cambiar entre vertical y horizontal?
- 10. Cómo cambiar la contraseña de root de mysql
- 11. Cómo recuperar o cambiar la contraseña de Oracle sysdba
- 12. Cómo cambiar mediante programación la contraseña de Active Directory
- 13. ¿Cómo cambiar la contraseña de root a una vacía?
- 14. ¿Cómo cambiar la contraseña de usuario de Drupal programáticamente?
- 15. Cómo cambiar la contraseña de administrador en jackrabbit
- 16. Cómo cambiar la contraseña LDAP a través de JNDI
- 17. Diferencia entre seleccionar de la tabla directamente y ver
- 18. cambiar contraseña char en HTML
- 19. Cambiar la contraseña de la clave de firma de Android
- 20. ¿Cuál es la diferencia (si existe) entre Html.Partial (ver, modelo) y Html.RenderPartial (ver, modelo) en MVC2?
- 21. Cambiar la contraseña de usuario de Linux del script PHP
- 22. DirectoryEntry para cambiar la contraseña: Un comportamiento diferente entre Vista/Server 2008, a
- 23. ¿Puedo cambiar mi propia contraseña de mysql y PMA? Problema
- 24. cómo sqlConnection oculta la contraseña de la cadena de conexión
- 25. ocultar la contraseña de base de datos usando la especificación codec en datasource.groovy no trabajar
- 26. Cómo ver todas las etiquetas en TortoiseHg. ¿Alguna forma práctica de cambiar y calcular diferencias entre ellos?
- 27. Cómo cifrar la contraseña
- 28. Ocultar entrada del usuario de solicitud de contraseña
- 29. Cambiar la contraseña del administrador local en C#
- 30. Las diferencias entre detach(), ocultar() y remove() - jQuery
Para mostrar la contraseña, no necesita crear ninguna clase nueva. Simplemente llame a 'setTransformationMethod (null)'. –
@Janusz, el uso de lo siguiente dará solución gud.setTransformationMethod (PasswordTransformationMethod.getInstance()); y setTransformationMethod (HideReturnsTransformationMethod.getInstance()); –
@Janusz, pero ¿cómo mostrar/ocultar las teclas en el teclado? – NarendraJi