我将在Android应用程序的几个页面上显示完整的文本文档.每个页面都包含一个TextView控件,负责显示文本.它还包含一个下一个按钮,该按钮负责更新textview并按照文本从最后显示的部分结束的位置开始.
问题是如何在TextView的可显示区域中找到最后显示的单词?
注意:在这个应用程序中,textView 不应该滚动或使用ellipsize.还必须注意,文本化可以增加或减少.要更好地了解情况:要显示的示例文本:
这是全文.在第一页它刚刚结束在这里的,必须从这里被遵循.
这是其显示的示例说明.问题是如何找到第1页中显示的最后一个单词"here"?

最后我开发了一段代码,可以找到最后显示的单词。考虑到我们将使用属性width和height作为其大小、以 dp 为单位的textSize作为文本大小的文本视图,函数 formatStringToFitInTextView 计算 textview 中最后显示的单词并将其作为函数输出返回。在下面的示例中,我们将 SERIF 字体视为 TextView 字体。
String formatStringToFitInTextView(int width, int heigth, String inputText,float textSize) {
String[] words;
String lastWord = "";
String finalString="";
StaticLayout stLayout;
int i,numberOfWords;
int h;
Typeface tf = Typeface.SERIF;
TextPaint tp = new TextPaint();
tp.setTypeface(tf );
tp.setTextSize(textSize); //COMPLEX_UNIT_DP
words = inputText.split(" "); //split input text to words
numberOfWords = words.length;
for (i=0;i<numberOfWords;i++){
stLayout= measure(tp,finalString+words[i]+" ",width);
h=stLayout.getHeight();
if (stLayout.getHeight() > heigth) break;
finalString += words[i]+" ";
lastWord = words[i];
}
return lastWord;
}
StaticLayout measure( TextPaint textPaint, String text, Integer wrapWidth ) {
int boundedWidth = Integer.MAX_VALUE;
if( wrapWidth != null && wrapWidth > 0 ) {
boundedWidth = wrapWidth;
}
StaticLayout layout = new StaticLayout( text, textPaint, boundedWidth, Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false );
return layout;
}
Run Code Online (Sandbox Code Playgroud)
执行操作的总逻辑是将输入文本拆分为单词,并将单词一个接一个地添加到文本视图,直到填满提供的高度和宽度,然后返回最后添加的单词作为最后显示的单词。
| 归档时间: |
|
| 查看次数: |
1695 次 |
| 最近记录: |