3

我在 ScrollView 中有一个 TextView,TextView 充满了一个大文本,随时只有部分文本在屏幕上可见。现在我想(以编程方式)强制文本的某些部分对用户可见。例如,我的文字是:

Lorem ipsum dolor sit amet, consectetur adipiscing elit。Ut id ante Tellus。Nulla facilisi。Sed gravida fringilla velit,非 sollicitudin Tellus egestas 非。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 等。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 前庭 adipiscing。暂停潜力。整数 sollicitudin laoreet enim ac suscipit。Quisque convallis facilisis pharetra。

我想强制用户看到粗体字(这个例子中是tortor ) (也许通过使用正确的值垂直滚动 textview)。有没有办法做到这一点?

编辑:我不想让这个词加粗!更新了问题以澄清我的要求。

4

3 回答 3

1

这将是一个相当大的努力,但使用android.graphics.Paint#measureText(...)resp。breakText(...)应该可以计算出您必须如何滚动才能使所需的单词可见。您必须考虑字体、字体大小、显示文本的视图大小等。

于 2012-08-27T18:21:20.213 回答
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);
}

我对此有两点说明:

  1. 这只会滚动到第一次出现,但很容易更改String.indexOf(string, start)并找到第二次、第三次等。

  2. 如果您想在应用程序启动后立即滚动到此位置,则必须等到 onResume() 完成后。但是没有办法解决这个问题......我建议使用处理程序,如果您需要它,我可以帮助您。

希望有帮助!

于 2012-08-27T18:53:15.750 回答
0

您可以使用带有粗体选项的 html 标记来使该特定单词变为粗体。

于 2012-08-27T18:13:18.433 回答