มีคำตอบที่ดีมากมายที่นี่ แต่ฉันต้องการเพิ่มสิ่งเดียวเท่านั้น บางครั้งมันเกิดขึ้นที่คุณต้องการเลื่อน ScrollView ของคุณไปยังมุมมองที่เฉพาะเจาะจงของรูปแบบแทนการเลื่อนเต็มไปด้านบนหรือด้านล่าง
ตัวอย่างง่ายๆ: ในแบบฟอร์มการลงทะเบียนหากผู้ใช้แตะที่ปุ่ม "สมัครสมาชิก" เมื่อไม่มีการกรอกข้อความแก้ไขของแบบฟอร์มคุณต้องการเลื่อนไปยังข้อความแก้ไขเฉพาะนั้นเพื่อบอกผู้ใช้ว่าเขาต้องกรอกข้อมูลในฟิลด์นั้น
ในกรณีนี้คุณสามารถทำสิ่งนั้นได้:
scrollView.post(new Runnable() {
public void run() {
scrollView.scrollTo(0, editText.getBottom());
}
});
หรือถ้าคุณต้องการการเลื่อนที่ราบรื่นแทนการเลื่อนทันที:
scrollView.post(new Runnable() {
public void run() {
scrollView.smoothScrollTo(0, editText.getBottom());
}
});
เห็นได้ชัดว่าคุณสามารถใช้มุมมองประเภทใดก็ได้แทนการแก้ไขข้อความ โปรดทราบว่า getBottom () ส่งคืนพิกัดของมุมมองโดยยึดตามรูปแบบพาเรนต์ดังนั้นมุมมองทั้งหมดที่ใช้ภายใน ScrollView ควรมีเฉพาะพาเรนต์เท่านั้น (เช่น Linear Layout)
หากคุณมีผู้ปกครองหลายคนอยู่ในลูกของ ScrollView วิธีแก้ปัญหาเดียวที่ฉันได้พบคือการเรียก requestChildFocus บนมุมมองหลัก:
editText.getParent().requestChildFocus(editText, editText);
แต่ในกรณีนี้คุณไม่สามารถเลื่อนได้อย่างราบรื่น
ฉันหวังว่าคำตอบนี้สามารถช่วยคนที่มีปัญหาเดียวกัน
mScrollView.post(new Runnable() { public void run() { mScrollView.fullScroll(View.FOCUS_DOWN); } });