将html内容呈现为动态“页面”

时间:2012-02-03 15:41:39

标签: android webview textview

我正在为Android构建电子书阅读器。电子书的内容通常分为html文件(epub),其中包含一个或几个章节。

我打算建立一个电子书阅读器,将这些文件的内容分成不同的“页面”。问题是要知道一页上有多少文本“适合”并计算正确的页面数量,因为这取决于许多不同的因素,例如:字体大小,字号,段落,图像,分页符,标题等。

Idealy我会让我的文本合理且可选择,因为普通的TextView或EditText是不可能的,我必须使用不可滚动的WebView。

总而言之,我如何“测量”适合我WebView上一个“页面”的文本数量?或者是否有更好的方法来解决这个问题?我看到Paint类支持测量文本和breakText。

谢谢!

3 个答案:

答案 0 :(得分:7)

注意:此答案不会将webview用作显示表面。

您可以使用Canvas绘制每个页面。画布为您提供高度和高度。宽度使用drawText根据宽度和宽度绘制画布上的每一行的宽度高度可用。

基本上你可以计算出一行中可以容纳多少个字母,取出那么多单词,注意不要拆分任何单词并继续绘制文本。

如果你分解了每个段落使用不同工人的任务,你也可以快速完成。

答案 1 :(得分:3)

也许你可以这样做

  • 正在WebView

  • 中添加和呈现文本
  • 在WebView中,您可以使用Javascript检查DOM树的当前状态并提取各个元素的宽度和高度等测量值

  • Javascript通过回调将页面大小传回WebView创建者

  • 当Javascript检测到超出页面大小阈值时,会发送需要分页的信号

Android HTML5 Kindle使用Javascript打破页面,所以它绝对可能。

答案 2 :(得分:1)

查看FitTexthere的来源。两者都计算出在给定空间中可以容纳多少文本。您可以借鉴他们的想法并根据您的目的进行调整。