2009-12-22 36 views
10

Tôi có một TextView bên trong một ScrollView. Giả sử ScrollView có tên là s và TextView có tên là t.Cuộn một TextView đến một dòng cụ thể

Tôi có nhiều dòng được hiển thị trong TextView và đồng thời tôi muốn cuộn chế độ xem đến một dòng cụ thể.

Vì vậy, tôi đã làm điều này:

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

Nhưng nó sẽ không di chuyển, trừ lần thứ hai. Dường như lần đầu tiên mã kết thúc, ScrollView biết tổng chiều cao của TextView là bao nhiêu.

Vì vậy, tôi nghĩ rằng phải có một cái gì đó để buộc tính toán chiều cao cần thiết trước khi gọi scrollTo. Làm thế nào để làm điều đó (hoặc bằng cách khác)?

+0

Bạn có đang chạy mã trong chuỗi giao diện người dùng không? – Tughi

+0

Đó là mã tại onReceiveResult (được gọi là một hoạt động khác, hoạt động này đưa một số dữ liệu và kết thúc() và nhận dữ liệu). Tôi không hiểu đủ về mô hình luồng trong Android. – yuku

Trả lời

20

Tìm câu trả lời here.

Thay vì gọi trực tiếp scrollTo, chúng tôi phải gọi post thay vì trên ScrollView. Những công việc này.

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

Gần 2 năm sau .. Tôi nghĩ điều này giống như việc đăng mã lên một người xử lý. Nó chỉ ra rằng bạn cần phải đăng nó vào scrollview thay vì để xử lý. (mã trên là chính xác) – yuku

Các vấn đề liên quan