如何将ScrollView滚动到文本中的特定位置

5

我有一个ScrollView,其中包含一个TextView,我想像HTML中的锚点一样将其滚动到特定的段落(例如page.html#paragraph_id)。

是否有人知道如何做到这一点?

谢谢!


我不太懂HTML,如果你想通过编程的方式滚动ScrollView,可以通过以下方式实现:ScrollView sv = (ScrollView)findViewById(R.id.scrl); sv.scrollTo(0, sv.getBottom()); 或者 sv.scrollTo(5, 10); - Rethinavel
3个回答

1

尝试使用scrollTo方法了解更多信息

检查以下代码

TextView tv = (TextView)findViewById(R.id.textView);//my text view
ScrollView sv = (ScrollView) findViewById(R.id.scrollView);//my scrollview
String log ="a Very long text";
tv.setText(log);

sv.post(new Runnable() {

    public void run() {
        sv.scrollTo(0, "value till you want to scroll");
    }
}); 

1

这是一个非常有趣的问题。我也在尝试做同样的事情。
我所做的是将TextView的行映射到ScrollView坐标的想法。
你可以获取设备显示大小(以像素为单位)和TextView的行高(通过TextView.getLineheight()),然后计算行坐标并将其映射到ScrollView。
正如我所说,我也正在尝试做这个。我目前正在进行相同的工作。如果我找到一些可行的代码,我会告诉你。

enter image description here

需要做很多工作,因为Android操作系统没有提供您(或我)想要的这种滚动方式。
或者您可以为每行使用TextView并使用此代码:
mScrollView.scrollTo(0, your_text_view_with_the_line.getBottom());


何必这么麻烦呢?只需将其分割成不同的TextView并使用上述解决方案即可... - Erez.info
1
@Erez.info 制作太多对象会消耗更多的堆空间。所以...我已经指定了每行只能使用一个文本视图。但是假设你有500行,那么这是一个严重的问题。 - johntheripp3r
你是对的,但在我的情况下只有10段,所以这个解决方案非常好。无论如何,当你完成后我想看看你的代码。 - Erez.info

0

你试过this吗?

假设你有一个TextView或类似的元素(在你的情况下是html#paragraph_1),那么你可以通过以下方式获取该元素的顶部位置:

TextView yourTextView = (TextView) findViewById(R.id.tv_your_text_view);
int position = yourTextView.getTop(); // you could also call yourTextView.getBottom()

之后,您可以滚动到您的位置(您可以将此代码片段放入您的onClick()方法或类似方法中,在单击链接或按钮时跳转到此位置):

ScrollView sc = (ScrollView) findViewById(R.id.scroll_view);

sc.post(new Runnable() { 
    public void run() { 
        sc.scrollTo(0, position); // these are your x and y coordinates
    }
});

注意:我预期yourTextView应该在ScrollView布局中。
希望这能帮助你入门。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接