2009-12-22 31 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