Представить 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 или, возможно, здесь. Оба показывают, сколько текста может поместиться в заданное пространство. Возможно, вы сможете заимствовать у них идеи и адаптироваться для своих целей.