Подтвердить что ты не робот

Получить размер текста в TextView

У меня проблема с размещением textView в заданных координатах центра x и y. Во-первых, я попытался установить текст в textView и переместить вид с шириной и высотой представления из этой ссылки.

Но это не работает, и я хотел бы попробовать что-то еще. Я хотел бы узнать, есть ли способ получить размер, который будет указан в моем текстовом элементе? Я имею в виду, я знаю текст и textSize, как я могу получить ширину и высоту моего textView?

Что-то вроде метода (NSString)sizeWithFont; для тех, кто знает iPhone dev.

4b9b3361

Ответ 2

Rect bounds = new Rect();

textView.getPaint().getTextBounds(textView.getText().toString(), 0, textView.getText().length(), bounds);

bounds.width() даст вам точную ширину текста в текстовом представлении.

Ответ 3

По какой-то причине решение Midverse Engineer не дает мне всегда правильных результатов (по крайней мере, на некоторых версиях Android). Решение Sherif elKhatib работает, но имеет побочный эффект изменения MeasuredWidth и Height. Это может привести к некорректному позиционированию textView.

Мое решение:

width = textView.getPaint().measureText(text);
metrics = textView.getPaint().getFontMetrics();
height = metrics.bottom - metrics.top;

Ответ 4

Использование внутреннего класса TextView Paing не так уж и жарко, если у вас несколько строк текста и разные отступы. Так что перестаньте пытаться изобретать велосипед. Используйте методы getMeasuredHeight и getMeasuredWidth после вызова measure(UNSPECIFIED, UNSPECIFIED). Только не забудьте получить новые значения внутри поста, иначе в большинстве случаев вы получите неправильный результат.

tv.setText(state.s);
tv.measure(UNSPECIFIED,UNSPECIFIED);
tv.post(new Runnable() {
    @Override
    public void run() {
       Log.d("tv","Height = "+tv.getMeasuredHeight());
       Log.d("tv","Width  = "+tv.getMeasuredWidth());
    }
});