Android: Как узнать, сколько текста может поместиться в моем textView (моей странице)? - PullRequest
9 голосов
/ 14 сентября 2011

Я хочу создать читатель текста, который будет вырезать текст и поместить его в TextView (представляет мои страницы) и один за другим.Они содержатся в ViewFlipper (представляет весь мой текст), который позволяет мне переворачивать страницы.

К минусам, я не могу разумно обрезать свой текст.Пока я ограничиваю каждое TextView количеством символов, но оно очень нестабильно.Действительно, некоторые буквы занимают больше места, чем другие. Мы не можем использовать этот метод.

Как мы можем узнать, какое количество текста будет входить в TextView?

Я пытался найти максимальный размер моего просмотра вручную.Я вызвал в:

float test = view.getPaint().measureText(myString);

Это работает хорошо.Когда я ставлю 480 букв (0 и 1), я получаю 14 400, и мой текст полностью находится на экране.С помощью:

1  -> 12.0
0  -> 12.0
é  -> 11.0
\n -> 13.0
\r ->  7.0

всего для заполнения страницы -> 14400

Проблема в том, что разрывы строк и возврат каретки вызывают проблемы.

Если в моей строке есть только буквы или цифры, это хорошо: если мы соблюдаем максимальный размер 14 400, все отображается на экране.Нет проблем!

К минусам, если разрыв строки или возврат каретки не работает.Даже если мы соблюдаем ограничение 14400, текст выше и отображается не полностью.

Это потому, что метод "MeasureText"; "возвращает только 13 для разрыва строки. Но это странно, разрыв строкидолжно быть не менее 480, чтобы сделать его непротиворечивым.

Как издатели eBook (Moon Reader, + Aldiko) так хорошо форматируют текст? Каждая страница имеет одинаковую высоту, текст заканчиваетсяв том же месте ..

Ответы [ 2 ]

2 голосов
/ 14 сентября 2011

Вы можете исправить количество строк в вашем TextView, добавив android:maxLines="some_integer".Другой способ таков:

if (myTextView.getMeasuredWidth() < myTextView.getPaint().measureText(myText)) {
    myTextView.setHorizontalFadingEdgeEnabled(true);
    myTextView.setHorizontallyScrolling(true);
}

Но это добавит эффект облачности к последнему символу, если текст слишком длинный.

0 голосов
/ 21 марта 2016

Прежде чем получить измеренную ширину или высоту, вызовите метод ниже:

anyview.measure(0,0);

без вызова этого метода вы все заработаете, получая 0 value для height и width

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...