Здесь много хороших ответов, но я хочу добавить только одну вещь.Иногда случается, что вы хотите прокрутить 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);
, но в этом случае у вас не может быть плавной прокрутки.этот ответ может помочь кому-то с той же проблемой.