type setinputtype inputtype example edittext android passwords android-edittext

android - setinputtype - Cambia programáticamente el tipo de entrada de EditText de PASSWORD a NORMAL y viceversa



inputtype edittext (18)

En mi aplicación, tengo un EditText cuyo tipo de entrada predeterminado está configurado en android:inputType="textPassword" por deault. Tiene un CheckBox a su derecha, que cuando se marca, cambia el tipo de entrada de EditText a NORMAL PLAIN TEXT. El código para eso es-

password.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);

Mi problema es que cuando CheckBox está desmarcada, debería volver a establecer el tipo de entrada en PASSWORD. Lo he hecho usando-

password.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD);

Pero, el texto dentro de ese texto de edición todavía está visible. Y para sorpresa, cuando cambio la orientación, automáticamente establece el tipo de entrada en PASSWORD y el texto en el interior está con viñetas (se muestra como una contraseña).

Cualquier forma de lograr esto?


Blockquote

recuento int [] final = {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]--; } } });


Ok, después de horas de intentar finalmente lo implementé. A continuación está el código ...

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

Explicaciones: - Tengo un botón con texto predeterminado como show. Después del evento onclick, verifica si se muestra el texto del botón. Si se muestra, entonces cambie el tipo de entrada, ajuste la posición del cursor y establezca el nuevo texto como se oculta en él.

Cuando está oculto ... haciendo lo contrario, es decir, ocultando la contraseña, ajustando el cursor y configurando el texto como se muestra. Y eso es. Está funcionando como un encanto.


Cambio el tipo de entrada en mi casilla de verificación, entonces en mi OnCheckedChangeListener hago:

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

Y finalmente funcionó.

Parece un problema booleano con TYPE_TEXT_VARIATION_VISIBLE_PASSWORD . Invierta la bandera y debería solucionar el problema.

En tu caso:

password.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD|~InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);


Complete el código cuando desee aplicar la visibilidad de Contraseña en el texto de edición de Contraseña.

Crear un mango [Cualquier dibujable o casilla de verificación]

al hacer clic o en Marcar / Desmarcar escribe esto:

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

No olvides escribir esta línea:

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

Restablece el cursor al final de la línea.


Desde la Biblioteca de soporte v24.2.0. puedes acivir esto muy fácil

Lo que debes hacer es simplemente:

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

    dependencies { compile "com.android.support:design:25.1.0" }

  2. Use TextInputEditText junto con 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 atributo passwordToggleEnabled hará que aparezca la contraseña alternar

  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 TextInputLayout .


Este es el controlador onClick completo para la imagen / botón para mostrar / ocultar la contraseña.

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


Esto funcionó para mí:

mytext.setInputType(InputType.TYPE_CLASS_NUMBER);


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 EditText sin la necesidad de un CheckBox .

Puede hacerlo básicamente actualizando primero su versión de la biblioteca de soporte a 24.2.0 y luego estableciendo un inputType de inputType de contraseña en 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>

Puede obtener más información sobre la nueva característica en la documentación del desarrollador para TextInputLayout .


Mi búsqueda de una solución similar para Visual Studio / Xamarin me llevó a este hilo. Debajo está lo que funcionó para mí con Xamarin. Tenga en cuenta que esta implementación conserva el indicador TYPE_TEXT_FLAG_NO_SUGGESTIONS al cambiar de modo.

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

Para mostrar los caracteres: et.InputType = Android.Text.InputTypes.TextVariationVisiblePassword | Android.Text.InputTypes.TextFlagNoSuggestions; et.InputType = Android.Text.InputTypes.TextVariationVisiblePassword | Android.Text.InputTypes.TextFlagNoSuggestions;

Para ocultar caracteres: et.InputType = Android.Text.InputTypes.TextVariationPassword | Android.Text.InputTypes.ClassText; et.InputType = Android.Text.InputTypes.TextVariationPassword | Android.Text.InputTypes.ClassText;

Para establecer la posición en el final: int position = et.Text.Length; et.SetSelection(position, position);


Otro ejemplo simple que utiliza ImageView para alternar la visibilidad con menos código, debido a la única asignación de InputType , solo necesitamos operador de igualdad:

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()); } });

Reemplazando:

InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD

Con :

InputType.TYPE_CLASS_TEXT

Dará el mismo resultado pero palabra más corta.


Solo para las personas que tienen el mismo problema. Simplemente agrega un atributo adicional a EditText mediante programación y listo.

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

Además, asegúrese de que el cursor esté al final del texto en EditText. Porque, cuando cambia el tipo de entrada, el cursor se establecerá automáticamente en el punto de inicio. Entonces sugiero usar el siguiente código:

et_password.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); et_password.setSelection(et_password.getText().length());

Al usar enlace de datos, puede hacer uso del siguiente código

<data> <import type="android.text.InputType"/> . . . <EditText android:inputType=''@{someViewModel.isMasked ? (InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD) : InputType.TYPE_CLASS_TEXT }''


Solo un comentario adicional sobre la respuesta correcta proporcionada por @Rajkiran, es posible que desee agregar

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

al estado de entrada NORMAL para que los usuarios no se molesten por la autosugestión del teclado


Use este código para cambiar la contraseña al texto y viceversa. Este código funcionó perfectamente para mí. Prueba esto..

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


alguna situación dinámica holder.edit_pin.setInputType(InputType.TYPE_CLASS_NUMBER); no funcionará, así que es mejor usar ambos de esa manera

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

Nota: esto es adecuado para cuando usa controles dinámicos como el uso de arrayaapter


use este código para cambiar la contraseña al texto y viceversa

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()); } } });

para ver el código de muestra completo, consulte http://www.codeproject.com/Tips/518641/Show-hide-password-in-a-edit-text-view-password-ty


android:inputType="textPassword" de su diseño. Es por eso que está cambiando a contraseña cuando cambia la orientación. Porque cada vez que cambia la orientación, la vista se recrea.

En cuanto al primer problema, intente esto:

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

básicamente vaciar el texto antes de cambiar el tipo de entrada y luego volver a agregarlo.


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()); } } });


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

El método anterior en realidad no funcionó para mí. La respuesta a continuación funciona para 2.2 sdk.

password.setTransformationMethod (PasswordTransformationMethod.getInstance ());

Establecer inputType para un EditText?