2011-12-22 22 views
5

Tengo una aplicación donde la gente necesita iniciar sesión con una contraseña. Me gustaría que solo se muestre el último carácter escrito, pero todo lo que veo son todos los puntos de los personajes o todos los caracteres visibles.Mostrar el último carácter de una contraseña en EditText

he intentado un par de cosas:

password.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD); 
password.setTransformationMethod(PasswordTransformationMethod.getInstance()); 
password.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); 

y el ajuste InputType en el xml.

Solo he probado en un Galaxy S2 ya que es el único dispositivo con Android en mi oficina en este momento, por lo que no sé si el problema es solo con mi dispositivo.

edit: Acaba de ser probado en un HTC Sensation de un colega y funciona según lo previsto en su teléfono, pero la pregunta sigue siendo ¿cómo conseguir lo mismo en el Galaxy S2?

+2

Creo que es simplemente cómo el fabricante implementa la interfaz de usuario del sistema, y ​​que sólo varía dispositivo por dispositivo, por lo tanto, estoy bastante seguro de que no es algo que puede ser un cambio en el extremo revelador. – Jakar

+1

Creo que esta es una configuración para todo el dispositivo y no es algo que pueda cambiar en una aplicación. Si selecciona "Contraseñas visibles" en el menú "Configuración de ubicación y seguridad", puede activar o desactivar esta función. – ethan

+0

Se sorprenderá si comprueba cómo su EditText para la contraseña en la orientación horizontal. :) – Jin35

Respuesta

16

Han pasado casi 1.5 años desde que se le preguntó: P. Pero tenía el mismo requisito y pude implementarlo con éxito. Pase un objeto de la clase MyTransformation como parámetro en setTransformationMethod y listo :) Este es el código.

public class MyTransformation extends PasswordTransformationMethod{ 

    @Override 
    public CharSequence getTransformation(CharSequence source, View view) { 
     return new PasswordCharSequence(source); 
    } 

    private class PasswordCharSequence implements CharSequence { 
     private CharSequence mSource; 
     public PasswordCharSequence(CharSequence source) { 
      mSource = source; // Store char sequence 
     } 
     public char charAt(int index) { 
     //This is the check which makes sure the last character is shown 
      if(index != mSource.length()-1) 
       return '•'; 
      else 
       return mSource.charAt(index); 
     } 
     public int length() { 
      return mSource.length(); // Return default 
     } 
     public CharSequence subSequence(int start, int end) { 
      return mSource.subSequence(start, end); // Return default 
     } 
    } 
} 

enter image description here

+0

me di por vencido cuando funcionaba en la mayoría de los dispositivos excepto el mío, pero con este código incluso funciona en mi dispositivo. gracias :) – Youri

+0

@Youri: Me alegro de ayudar :) – AndyFaizan

+0

Gracias @AndyFaizan, ¡me ahorraste tiempo! – wf9a5m75

Cuestiones relacionadas