我正在为Android编写一个简单的文本/电子书查看器,因此我使用了TextView向用户显示HTML格式的文本,因此他们可以通过来回浏览页面中的文本.但我的问题是我不能在Android中对文本进行分页.
我不能(或者我不知道如何)从断行和分页算法中获得适当的反馈,其中TextView用于将文本分成行和页面.因此,我无法理解内容在实际显示中的结束位置,以便我继续从下一页的剩余部分开始.我想找到克服这个问题的方法.
如果我知道屏幕上绘制的最后一个字符是什么,我可以轻松地填充足够的字符来填充屏幕,并且知道实际绘画的完成位置,我可以继续下一页.这可能吗?怎么样?
在StackOverflow上已经多次询问过类似的问题,但没有提供令人满意的答案.这些只是其中的一小部分:
有一个答案,似乎有效,但它很慢.它会添加字符和行,直到填充页面.我不认为这是打破分页的好方法:
它不是这个问题,而是PageTurner电子书阅读器大部分都是正确的,尽管它有点慢.
PS:我不局限于TextView,我知道断行和分页算法可能非常复杂(如在TeX中),所以我不是在寻找一个最佳答案,而是一个相当快速的解决方案,可以被用户.
更新:这似乎是获得正确答案的良好开端:
答:完成文本布局后,可以找到可见文本:
ViewTreeObserver vto = txtViewEx.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
ViewTreeObserver obs = txtViewEx.getViewTreeObserver();
obs.removeOnGlobalLayoutListener(this);
height = txtViewEx.getHeight();
scrollY = txtViewEx.getScrollY();
Layout layout = txtViewEx.getLayout();
firstVisibleLineNumber = layout.getLineForVertical(scrollY);
lastVisibleLineNumber = layout.getLineForVertical(height+scrollY);
}
});
Run Code Online (Sandbox Code Playgroud) 我正在为Android 3.0平板电脑开发电子书阅读器应用程序.首先,我有一大块String数据.我想根据设备的屏幕大小将该字符串拆分/拆分为页面[我打算使用文本切换器或查看翻板].虽然我尝试使用getWindowManager()方法,但我无法获得首选结果.
在下面的线程中提到Text Switcher会根据屏幕大小自动中断文本.但是我不这么认为. 在Android应用程序中管理文本,就像在电子书中一样
这是我使用的逻辑:
// retreiving the flipper
flipper = (ViewFlipper) findViewById(R.id.new_view_flipper);
// obtaining screen dimensions
Display display = getWindowManager().getDefaultDisplay();
int screenWidth = display.getWidth();
int screenHeight = display.getHeight();
// contentString is the whole string of the book
while (contentString != null && contentString.length() != 0)
{
totalPages ++;
// creating new textviews for every page
TextView contentTextView = new TextView(this);
contentTextView.setWidth(ViewGroup.LayoutParams.FILL_PARENT);
contentTextView.setHeight(ViewGroup.LayoutParams.FILL_PARENT);
contentTextView.setMaxHeight(screenHeight);
contentTextView.setMaxWidth(screenWidth);
float textSize = contentTextView.getTextSize();
Paint paint = new Paint();
paint.setTextSize(textSize);
int numChars = 0; …Run Code Online (Sandbox Code Playgroud) 我在文件[~100 KB]中有一些文本需要在一个文件中显示给用户TextView.我想将文本拆分成页面.
这是我想要实现分页的想法:
320 x 480.px]以容纳按钮等.N可以显示的字符数[ ].N字符数.这似乎可行,但看起来很粗糙,容易出错.有没有人有更好的想法?