Представить html-контент как динамические "страницы"

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

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

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

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

Спасибо!

Ответ 1

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

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

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

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

Ответ 2

Может быть, вы можете сделать это так:

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

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

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

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

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

Ответ 3

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