2011-12-22 10 views
5

Ho un'app in cui le persone devono effettuare il login con una password. Mi piacerebbe che solo l'ultimo carattere digitato venisse mostrato, ma tutto ciò che mi sembra di ottenere è tutti i punti di carattere o tutti i caratteri visibili.Mostrando l'ultimo carattere di una password in un EditText

ho provato un paio di cose:

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

e l'impostazione InputType nel xml.

Ho provato solo su una galassia s2 in quanto è l'unico dispositivo Android nel mio ufficio al momento, quindi non so se il problema è solo con il mio dispositivo.

modifica: appena testato su un HTC Sensation da un collega e funziona come previsto sul suo telefono, ma la domanda rimane come ottenere questa stessa cosa sul Galaxy S2?

+2

Credo che sia proprio come il produttore implementa l'interfaccia utente del sistema, ed è appena varia dispositivo dispositivo, quindi sono abbastanza sicuro che non è qualcosa che può essere il cambiamento alla fine degli sviluppatori. – Jakar

+1

Credo che questa sia un'impostazione estesa al dispositivo e non qualcosa che puoi cambiare in un'app. Se si seleziona "Password visibili" nel menu "Impostazioni posizione e sicurezza" è possibile attivare o disattivare questa funzione. – ethan

+0

Sarai sorpreso se verifichi come il tuo EditText per la password in orientamento orizzontale. :) – Jin35

risposta

16

Sono passati quasi 1,5 anni da quando è stato chiesto: P. Ma avevo lo stesso requisito e sono riuscito a implementarlo con successo. Passa un oggetto della classe MyTransformation come parametro nel setTransformationMethod e sei a posto :) Ecco il codice.

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

Mi sono arreso quando ha funzionato sulla maggior parte degli altri dispositivi tranne il mio, ma con questo pezzo di codice funziona persino sul mio dispositivo. grazie :) – Youri

+0

@Youri: Felice di aiutare :) – AndyFaizan

+0

Grazie @AndyFaizan, risparmi il mio tempo! – wf9a5m75

Problemi correlati