3

我有一个很长的文本,所以我决定将它分成几页,然后我放了一个,所以每次滑动都会滚动到下一页。我这样做的方式是:

    NumberOfPages=text.length()/CharPerPage;    //CharPerPage=500;  
    NumberOfPages++;        

    Chapters.add(text.indexOf(" ", CurrentPage*CharPerPage));
    CurrentPage++;
    int tmp=0;
    for(int i =NumberOfPages;i>0;i--)
    {           
         tmp =(CurrentPage*CharPerPage);
        if(tmp>text.length())
        {
            Chapters.add(text.length());    
            break;
        }
        else
        {
        Chapters.add(text.indexOf(" ", tmp));   
        CurrentPage++;
        }
    }

所以我将文本分成几页,每页有 500 个字符......但这并不好,因为 Android 有不同的屏幕尺寸和形状,并且没有计算换行符,所以它可能超出屏幕......所以任何人都可以建议一个如何知道需要多少个字符来填充屏幕,以便我可以将其余的文本放到另一个页面?谢谢。

4

1 回答 1

1

好的,这是一个镜头 - 一个相当笨拙的镜头,但简而言之:

*您需要知道任何给定的文本行是否适合您的视图中的宽度 *您需要知道您有多少行 *您需要处理嵌入的换行符

所以

某些文本是否适合任何给定的行

  private boolean isTooLarge (TextView text, String newText) {    
     float textWidth = text.getPaint().measureText(newText);
     return (textWidth >= text.getMeasuredWidth ());
  } 

你的 textview 有多少行:

numLinesPerPage=mTextView.getHeight()/mTextView.getLineHeight();  //not this doesn't handle special cases where you've changed the font, bolded it etc

使用这两个工具,您可以遍历您的文本,添加单词来跟踪您还有多少行可以使用(如果您的文本包含换行符,则处理您的换行符)

注意:getHeight 不能在构造函数中调用,因为它还不知道高度 - 如果您有自定义控件,您也可以在 onDraw 或 onMeasure 中执行此操作。

于 2011-05-17T19:02:35.913 回答