我在ScrollView中有一个TextView,TextView中填充了一个大文本,其中只有部分文本在屏幕上随时可见。 现在我想(以编程方式)强制文本的某些部分对用户可见。例如,我的文字是:
Lorem ipsum dolor sit amet,consectetur adipiscing elit。 Ut id ante tellus。 Nulla facilisi。 Sed gravida fringilla velit,非sollicitudin tellus egestas non。 Cras congue,nulla id bibendum tempus,dui dui blandit elit,elementum dictum dolor eros et mi。 Nullam leo tellus,aliquet vel tincidunt sed,suscipit nec dui。 Nunc dapibus,odio vestibulum hendrerit vestibulum,lorem orci dictum arcu,quis porttitor lorem libero sit amet odio。 Sed imperdiet viverra diam,eu porttitor ipsum fringilla et。 Suspendisse consectetur sapien ac felis tincidunt dictum。 Suspendisse ultrices porta dignissim。 maecenas in nibh sed nisi facilisis dignissim non ut tortor 。 Pellentesque eleifend tempus sem,sit amet mattis arcu auctor id。 Vivamus在tortor rutrum diam vestibulum adipiscing。 Suspendisse的潜力。整数sollicitudin laoreet enim ac suscipit。 Quisque convallis facilisis pharetra。
我想强制大胆的单词(在此示例中为 tortor )对用户可见(可能通过使用正确的值垂直滚动textview)。 有没有办法做到这一点?
编辑:我不想让这个词大胆!问题已更新,以澄清我的要求。答案 0 :(得分:1)
这将是一项非常努力,但使用android.graphics.Paint#measureText(...)
resp。 breakText(...)
应该可以计算出如何滚动以显示所需的单词。您必须考虑字体,字体大小,显示文本的视图大小等。
答案 1 :(得分:1)
以下是滚动到特定单词的一种方法:
public void scrollToWord(String string) {
TextView textView = (TextView) findViewById(R.id.text1);
String text = textView.getText().toString();
// Find the first occurrence of the word
int position = text.indexOf(string);
// Calculate how far in the word is: 30%, 40%, 73%
int percent = (int) (position / (double) text.length() * 100);
// Calculate how far to scroll
int y = textView.getHeight() * percent;
// Finally scroll
((ScrollView) textView.getParent()).scrollTo(0, y);
}
我有两个注释:
这只会滚动到第一次出现,但很容易更改为String.indexOf(string, start)
并找到第二个,第三个等。
如果您想在应用启动后立即滚动到此位置,则必须等到onResume()完成后。但是没有办法解决这个问题...我建议使用Handler,如果你需要,我可以帮助你。
希望有所帮助!
答案 2 :(得分:0)
您可以使用带有粗体选项的html标记来使该特定单词变为粗体。