Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 将html内容显示为动态的“;“第页”;_Android_Webview_Textview - Fatal编程技术网

Android 将html内容显示为动态的“;“第页”;

Android 将html内容显示为动态的“;“第页”;,android,webview,textview,Android,Webview,Textview,我正在为android构建一个电子书阅读器。电子书的内容通常分为html文件(epub),其中包含一个或多个章节 我计划建立一个电子书阅读器,将这些文件的内容分成不同的“页面”。问题是要知道一页上“适合”多少文本,并计算正确的页数,因为这取决于许多不同的因素,例如:字体大小、字号、段落、图像、分页符、标题等 理想情况下,我会让我的文本对齐和可选择,因为这是不可能与正常的文本视图或编辑文本,我必须使用一个不可滚动的网络视图 总而言之,我如何“测量”我的网络视图中一个“页面”上的文本数量?或者有其他

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

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

理想情况下,我会让我的文本对齐和可选择,因为这是不可能与正常的文本视图或编辑文本,我必须使用一个不可滚动的网络视图

总而言之,我如何“测量”我的网络视图中一个“页面”上的文本数量?或者有其他更好的方法来解决这个问题吗?我看到Paint类支持measure text和breakText


谢谢

也许你可以这样做

  • 正在WebView中添加和呈现文本

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

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

  • 当Javascript检测到超过页面大小阈值时,它会发送一个信号,要求进行所需的分页


Android HTML5 Kindle使用Javascript进行分页,因此这是完全可能的。

注意:这个答案不使用webview作为您的显示界面。

可以使用绘制每个页面。画布提供了它的高度和宽度,您可以使用它根据可用的宽度和高度在画布上绘制每条线

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


如果您将任务分解为每个段落使用不同的工作人员,那么您也可能会使其快速完成

看看这个问题的根源,或者可能。这两个图都显示了给定空间中可以容纳多少文本。您可以借鉴他们的想法,并根据自己的目的进行调整。

尝试在my webview html中填充div,直到使用此函数溢出为止,但速度非常慢:/特定的答案不是很明智。有很多方法可以优化它,Kindle可以在JS中完成整本书的分页。例如,操作段落或句子,而不是单个字符或单词。我正在处理句子,它一点也不快。android的Java执行在一个单独的线程中运行,使用javascript接口从javascript返回android的通信非常缓慢,所以恐怕没有选择:/Ah。这是安卓系统的瓶颈——没有想到:(你能减少整个页面的通信量吗?我会认真重新考虑设置文本对齐的想法,因为众所周知,文本的可读性较差:使用画布使我无法选择文本并对其进行对齐:/你也可以解决这个问题。如果你能保留屏幕上哪个字符的地图..你可以调低uers的选择对话框[现在也可以是矩形]并在这些坐标之间翻转文本颜色以显示它们已被选中。这更像是一种解决方法,但应该可以:)。