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

+0

onReceiveResult (다른 액티비티, 액티비티는 일부 데이터를 넣고 finish()를 호출하고 데이터를 받음)의 코드입니다. 안드로이드의 스레딩 모델에 대해 충분히 이해하지 못합니다. – yuku

답변

20

대답은 here입니다.

scrollTo을 직접 호출하는 대신 ScrollView 대신 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 년 후 .. 나는 이것이 처리기에 코드를 게시하는 것과 같다고 생각했습니다. 핸들러 대신 scrollview에 게시해야한다는 것이 밝혀졌습니다. (위의 코드는 정확합니다) – yuku

관련 문제