相关疑难解决方法(0)

Android中的分页文本

我正在为Android编写一个简单的文本/电子书查看器,因此我使用了TextView向用户显示HTML格式的文本,因此他们可以通过来回浏览页面中的文本.但我的问题是我不能在Android中对文本进行分页.

我不能(或者我不知道如何)从断行和分页算法中获得适当的反馈,其中TextView用于将文本分成行和页面.因此,我无法理解内容在实际显示中的结束位置,以便我继续从下一页的剩余部分开始.我想找到克服这个问题的方法.

如果我知道屏幕上绘制的最后一个字符是什么,我可以轻松地填充足够的字符来填充屏幕,并且知道实际绘画的完成位置,我可以继续下一页.这可能吗?怎么样?


在StackOverflow上已经多次询问过类似的问题,但没有提供令人满意的答案.这些只是其中的一小部分:

有一个答案,似乎有效,但它很慢.它会添加字符和行,直到填充页面.我不认为这是打破分页的好方法:

它不是这个问题,而是PageTurner电子书阅读器大部分都是正确的,尽管它有点慢.

PageTurner电子书阅读器的屏幕截图


PS:我不局限于TextView,我知道断行和分页算法可能非常复杂(如在TeX中),所以我不是在寻找一个最佳答案,而是一个相当快速的解决方案,可以被用户.


更新:这似乎是获得正确答案的良好开端:

有没有办法检索TextView的可见行数或范围?

答:完成文本布局后,可以找到可见文本:

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)

java pagination android textview android-layout

38
推荐指数
3
解决办法
5740
查看次数

将大文本分解为android文本切换器或视图翻板中的页面

我正在为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)

android ebook-reader textview viewflipper

7
推荐指数
1
解决办法
4138
查看次数

Android TextView中的分页

我在文件[~100 KB]中有一些文本需要在一个文件中显示给用户TextView.我想将文本拆分成页面.

这是我想要实现分页的想法:

  • 确定屏幕宽度和屏幕高度320 x 480.
  • 计算75%的高度,[360 px]以容纳按钮等.
  • 确定字体大小
  • 计算N可以显示的字符数[ ].
  • 从文件中读取并仅显示N字符数.

这似乎可行,但看起来很粗糙,容易出错.有没有人有更好的想法?

pagination android text screen textview

6
推荐指数
1
解决办法
2773
查看次数