2016-05-17 6 views
4

У меня есть пользовательский класс EditText. В этом EditText мне нужно узнать ширину ввода. В зависимости от inputType из EditText текст имеет разные значения ширины.EditText ширина скрытого текста

Например:

final String text = "azazaz"; 
setText(text); 
  1. inputType является пароль, так что пользователь видеть, что: ****** (40px для например)

  2. нет inputType, так что пользователь видеть, что : azazaz (например, 60px)

Но в следующем коде будет установлено такое же значение textWidth в обоих вариантах (ширина текста без inputType)

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

ВОПРОС: Как я могу найти реальное значение ширины текста с паролем inputType?

ответ

2

Вы можете попытаться вычислить ширину строки, состоящей из того же количества символов PassCode:

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

это может быть хорошим решением, но текст скрыт не «\ *» символов. Текст скрыт несимволическими точками. Я использую «\ *» в качестве знака этих точек. –

+0

@ P.Ilyin Я отредактировал свой ответ для обнаружения символа паролей динамически – birdy

+1

Вы можете сделать 'password = method.getTransformation (text, textView);' и устранить цикл и 'StringBuilder' –

Смежные вопросы