2016-05-17 12 views
4

Ich habe eine benutzerdefinierte EditText Klasse. In diesem EditText muss ich eine Breite der Eingabe herausfinden. Abhängig von inputType von EditText hat der Text unterschiedliche Breitenwerte.EditText Breite des versteckten Textes

Zum Beispiel:

final String text = "azazaz"; 
setText(text); 
  1. input Passwort ist, so Benutzer sehen, dass: ****** (40px für zB)

  2. nicht input, so Benutzer sehen, dass : azazaz (60px für zB)

Aber der folgende Code wird den gleichen Wert vonsetzenin beiden Optionen (Breite des Textes ohne inputType)

final Paint p = new Paint(); 
p.setTextSize(getTextSize()); 
final float textWidth = p.measureText(text); 

FRAG: Wie kann ich einen echten Breitenwert von Text mit Passwort input finden?

Antwort

2

können Sie versuchen, die Breite des Zeichenfolge aus der gleichen Menge der Passcode Zeichen zusammengesetzt zu berechnen:

public static float calculateTextWidth(TextView textView, String text) { 
    final Paint p = new Paint(); 
    p.setTextSize(textView.getTextSize()); 

    String output = text; 
    TransformationMethod method = textView.getTransformationMethod(); 
    if (method != null) { 
     output = (String) method.getTransformation(text, textView); 
    } 
    return p.measureText(output); 
} 
+1

es gute Lösung sein, aber Text verborgen ist, nicht durch „\ *“ Symbole. Text wird durch nicht symbolische Punkte verdeckt. Ich benutze "\ *" als Zeichen für diese Punkte. –

+0

@ P.Ilyin Ich habe meine Antwort bearbeitet, um Passcode-Symbol dynamisch zu erkennen – birdy

+1

Sie könnten 'password = method.getTransformation (text, textView);' und beseitigen Sie die Schleife und 'StringBuilder' –

Verwandte Themen