У меня есть длинный текст и textView фиксированного размера. Как можно отображать текст постранично? Пользователи будут взаимодействовать с программой следующим образом: Он проведет пальцем влево или вправо, чтобы перейти к следующей или предыдущей странице.
В настоящее время я создаю PageManager для выполнения этой работы. Но это очень ограниченно. Основной код для обработки текста:
while (true) {
newLineIndex = TextUtils.indexOf(content, '\n', processIndex);
if (newLineIndex == -1) {// till the end of content
charCount = paint.breakText(content, processIndex, content.length(), false, leftLines * lineWidth, width);
} else {
charCount = paint.breakText(content, processIndex, ++newLineIndex, false, leftLines * lineWidth, width);
}
leftLines = (int) ((leftLines * lineWidth - width[0]) / lineWidth);
processIndex += charCount;
if (leftLines < 1 || processIndex >= content.length()) {
page = new Page();
page.endIndex = processIndex;
page.startIndex = pageBaseLine;
page.content = content.subSequence(page.startIndex, page.endIndex);
result.add(page);
pageBaseLine = processIndex;
leftLines = lineNumber;
}
if (processIndex >= content.length()) {
break;
}
}
Ограничение - страница может обрезать текст вроде
|A lon|
|g wor|
|d man|
// длинное слово man
или неверные строки из-за переноса слов:
// Диспетчер страниц вычисляет this (2 строки):
|a sentence with loooooooo|
|ooong word abcdefghijklmn|
// Но на самом деле в текстовом представлении (3 строки):
|a sentence with |
|looooooooooong word |
|abcdefghijklmn |
Таким образом, окончательное количество строк больше, чем вычисление. Так что мой менеджер страниц тупой. Кто-нибудь мне поможет? Благодарность!