Представлять HTML-контент как динамические "страницы" - PullRequest
11 голосов
/ 03 февраля 2012

Я создаю программу для чтения электронных книг для Android.Содержимое книги часто делится на html-файлы (epub) с одной или несколькими главами в них.

Я планирую создать программу для чтения электронных книг, которая будет делить содержимое этих файлов на разные "страницы».Проблема состоит в том, чтобы узнать, сколько текста «умещается» на одной странице, и рассчитать правильное количество страниц, поскольку это зависит от ряда различных факторов, таких как: размер шрифта, размер слова, абзацы, изображения, разрывы страниц, заголовки и т. д.

В идеале мой текст должен быть выровнен и выделен, а поскольку это невозможно при обычном TextView или EditText, я должен использовать не прокручиваемый WebView.

Подводя итог, как я могу "измерить", сколько текста помещается на одной "странице" в моем WebView? Или есть другой лучший подход для решения этой проблемы?Я видел, что класс Paint поддерживает текст меры и breakText.

Спасибо!

Ответы [ 3 ]

7 голосов
/ 06 марта 2012

Примечание. В этом ответе веб-просмотр не используется в качестве поверхности отображения.

Вы можете использовать Canvas , чтобы нарисовать каждую страницу. Холст дает вам высоту и ширину, используя которые вы можете нарисовать каждую линию на холсте, используя drawText , основываясь на доступной ширине и высоте.

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

Если вы разбиваете задачи на использование разных рабочих для каждого абзаца, вы, вероятно, также можете сделать это быстро.

3 голосов
/ 04 февраля 2012

Может быть, вы можете сделать это следующим образом

  • Текст добавляется и отображается в WebView

  • В WebView вы можете использовать Javascript дляпроверять текущее состояние дерева DOM и извлекать измерения, такие как ширина и высота отдельных элементов

  • Javascript передает размер страницы обратно создателю WebView через некоторый обратный вызов

  • Когда Javascript обнаруживает, что порог размера страницы превышен, он посылает сигнал о необходимом разрыве страницы

Android HTML5 Kindle выполняет разрыв страницы с помощью Javascript, так что это определенно возможно.

1 голос
/ 07 марта 2012

Посмотрите на источник FitText или, возможно, здесь . Оба показывают, сколько текста может поместиться в заданном пространстве. Возможно, вы сможете позаимствовать идеи у них и приспособиться к вашим целям.

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