Có rất nhiều câu trả lời hay ở đây, nhưng tôi chỉ muốn thêm một điều. Đôi khi, bạn muốn cuộn ScrollView của mình sang chế độ xem cụ thể của bố cục, thay vì cuộn toàn bộ lên trên cùng hoặc dưới cùng.
Một ví dụ đơn giản: trong biểu mẫu đăng ký, nếu người dùng chạm vào nút "Đăng ký" khi văn bản chỉnh sửa của biểu mẫu không được điền, bạn muốn cuộn đến văn bản chỉnh sửa cụ thể đó để nói với người dùng rằng anh ta phải điền vào trường đó.
Trong trường hợp đó, bạn có thể làm một cái gì đó như thế:
scrollView.post(new Runnable() {
public void run() {
scrollView.scrollTo(0, editText.getBottom());
}
});
hoặc, nếu bạn muốn cuộn trơn tru thay vì cuộn tức thì:
scrollView.post(new Runnable() {
public void run() {
scrollView.smoothScrollTo(0, editText.getBottom());
}
});
Rõ ràng bạn có thể sử dụng bất kỳ loại chế độ xem nào thay vì Chỉnh sửa văn bản. Lưu ý rằng getBottom () trả về tọa độ của chế độ xem dựa trên bố cục chính của nó, vì vậy tất cả các chế độ xem được sử dụng trong ScrollView chỉ nên có cha mẹ (ví dụ: Bố cục tuyến tính).
Nếu bạn có nhiều cha mẹ bên trong con của ScrollView, giải pháp duy nhất tôi tìm thấy là gọi requestChildF Focus trên chế độ xem chính:
editText.getParent().requestChildFocus(editText, editText);
nhưng trong trường hợp này bạn không thể có một cuộn trơn tru.
Tôi hy vọng câu trả lời này có thể giúp một người có cùng vấn đề.
mScrollView.post(new Runnable() { public void run() { mScrollView.fullScroll(View.FOCUS_DOWN); } });