Тут є багато хороших відповідей, але я хочу додати лише одне. Іноді трапляється, що ви хочете прокрутити свій 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, повинні мати лише батьківський (наприклад, лінійний макет).
Якщо у вас є кілька батьків всередині дитини ScrollView, єдине знайдене нами рішення - викликати requestChildFocus на батьківському поданні:
editText.getParent().requestChildFocus(editText, editText);
але в цьому випадку ви не можете мати плавну прокрутку.
Я сподіваюся, що ця відповідь може допомогти комусь із тією ж проблемою.
mScrollView.post(new Runnable() { public void run() { mScrollView.fullScroll(View.FOCUS_DOWN); } });