2009-12-22 28 views
10

我在ScrollView中有一个TextView。假设ScrollView的名称为s,TextView的名称为t将TextView滚动到特定行

我有很多行,以显示在TextView的,并在同一时间,我想滚动视图到指定的行。

所以我这样做:

t.setText(aVeryLongString); 
int y = t.getLayout().getLineTop(40); // e.g. I want to scroll to line 40 
s.scrollTo(0, y); 

但它不会滚动,除了第二次。看起来第一次代码完成后,ScrollView知道TextView的总高度是多少。

所以我觉得一定有什么东西迫使scrollTo调用之前计算所需要的高度。如何做到这一点(或以其他方式)?

+0

您是否正在UI线程中运行代码? – Tughi 2009-12-22 11:01:53

+0

这是onReceiveResult中的代码(称为另一个活动,活动放入一些数据并完成(),并接收数据)。我对android中的线程模型不够了解。 – yuku 2009-12-22 16:42:40

回答

20

找到了答案here

不是直接调用scrollTo,我们必须调用post而不是在滚动型。这工作。

t.setText(aVeryLongString); 
s.post(new Runnable() { 
    @Override 
    public void run() { 
     int y = t.getLayout().getLineTop(40); // e.g. I want to scroll to line 40 
     s.scrollTo(0, y); 
    } 
}); 
+0

差不多2年后..我认为这和把代码发布到处理程序是一样的。事实证明,您需要将其发布到滚动视图而不是处理程序。 (上面的代码是正确的) – yuku 2011-09-27 01:21:49