我想创建一个文本阅读器,它将剪切文本并将其放入TextView(代表我的页面)并一个接一个地放入。它们包含在ViewFlipper中(代表我的整个文本),它允许我翻页。
根据缺点,我不能聪明地剪切我的文字。现在我将每个TextView限制为多个字符,但它非常不稳定。事实上,有些字母占用的空间比其他字母多。我们不能使用这种方法。
我们如何知道文本的数量会进入TextView?
我试图手动查找我的View的最大大小。 我援引:
float test = view.getPaint().measureText(myString);
效果很好。当我输入480个字母(0和1)时,我得到14,400,我的文字完全在屏幕内。用:
1 -> 12.0
0 -> 12.0
é -> 11.0
\n -> 13.0
\r -> 7.0
总计填写页面 - > 14400
问题在于换行和回车导致问题。
如果我的字符串中只有字母或数字,那么好:如果我们尊重最大尺寸14,400,屏幕上会显示所有内容。没问题!
通过利弊,如果换行或回车,则不起作用。即使我们尊重14400的限制,上面的文字也没有完全显示。
这是因为“MeasureText”方法;“仅为换行符返回13。但奇怪的是,换行符应该至少包含480以使其保持一致。
出版商如何将电子书(Moon Reader,+ Aldiko)的文字格式化得如此之好?每个页面都有相同的高度,文本在同一个地方结束..
答案 0 :(得分:2)
您可以通过添加TextView
来修正android:maxLines="some_integer"
中的行数。另一种方式是:
if (myTextView.getMeasuredWidth() < myTextView.getPaint().measureText(myText)) {
myTextView.setHorizontalFadingEdgeEnabled(true);
myTextView.setHorizontallyScrolling(true);
}
但如果文字太长,这会在最后一个字符上添加阴影效果。
答案 1 :(得分:0)
在测量宽度或高度之前调用方法:
anyview.measure(0,0);
如果不调用此方法,您0 value
和height
width