Как посчитать сколько букв поместится в TextView Android?

Мне нужно сделать приложение наподобие книги. Заполнить листы ViewPagera текстом. Проблема такая:

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

Как посчитать сколько букв могут поместится в TextView если оно на полном экране?


Ответы (2 шт):

Автор решения: Andrew

Можно посчитать не кол-во букв, а кол-во строк которые можно разместить в textView. Например такой способ при использовании Paint:

int countLineBreaks(final TextView view, final String toMeasure) {

    final Paint paint = textView.getPaint();
    int startPos = 0;
    int breakCount = 0;
    final int endPos = toMeasure.length();

    while (startPos < endPos) {
        startPos += paint.breakText(toMeasure.substring(startPos, endPos),
                                   true,  tv.getWidth(),(float[]) null);
        lineCount++;
    }

    return lineCount;
}

вот например есть функция для проверки насколько текст больше чем виджет:

private boolean isTooLarge (TextView text, String newText) {
    float textWidth = text.getPaint().measureText(newText);
    return (textWidth >= text.getMeasuredWidth ());
}

Так же вот варианты решения вашей проблемы: 1, 2.

UPDATE

Можно сетить текст в виджет. Дальше через:

textView.getText()

получаем текст который уже показан. Дальше получаем его размер:

textView.getText().length()

следующим этапом отсекаем от общего стринга тот который уже показан:

String nextChunk = originalText.subString(textView.getText().length(),originalText.length())

и соответственно его и показываем в следующей странице. Но чтобы эта система работала и на следующих страницах а не только на первой, то нужно суммировать показанный текст, и его отрезать от оригинала

int shownText += textView.getText().length()

и тогда нарезка текста будет выглядеть так:

String nextChunk = originalText.subString(shownText ,originalText.length())

осталось только придумать как адекватно переносить текст на следующую страницу, и не рвать слова.

→ Ссылка
Автор решения: Nurseyit Tursunkulov

Как сказал Андрей: можно узнать сколько строк занимает у меня экран, из этих строк вытащить текст и уаля ->

val maxLines = textview.getHeight() / textview.getLineHeight()
  val start = textview.layout.getLineStart(0)
  val end = textview.layout.getLineEnd(maxLines-1)
  val content = textview.text.toString().substring(start, end)
content.length
→ Ссылка