Как программно прокрутить ScrollView до нижнего уровня
У меня проблема, которую я не могу решить: внутри ScrollView у меня есть только
LinearLayout. Посредством действия пользователя я программно добавляю 2 TextView
на этом LinearLayout, но по умолчанию свиток держится сверху.
Поскольку я контролирую действие пользователя, мне должно быть легко перейти к
снизу с чем-то вроде:
ScrollView scroll = (ScrollView) this.findViewById(R.id.scroll);
scroll.scrollTo(0, scroll.getBottom());
Но на самом деле нет. Потому что сразу после добавления двух новых
Элементы getBottom() все еще возвращают предыдущие два. Я попытался
обновите состояние, вызывающее refreshDrawableState()
, но я не работаю.
Есть ли у вас какие-либо идеи, как я могу получить фактическое дно ScrollView
после добавления некоторых элементов?
Ответы
Ответ 1
Это не отвечает на ваш вопрос.
Но это альтернатива, которая в значительной степени делает то же самое.
Вместо прокрутки в нижней части экрана измените фокус на вид, расположенный в нижней части экрана.
То есть, Заменить:
scroll.scrollTo(0, scroll.getBottom());
с:
Footer.requestFocus();
Удостоверьтесь, что вы указываете, что представление, например "Footer", является настраиваемым.
android:focusable="true"
android:focusableInTouchMode="true"
Ответ 2
Вам нужно сделать прокрутку в отдельном потоке, иначе это не сработает. Попробуйте следующее:
scrollView.post(new Runnable() {
@Override
public void run() {
scrollView.fullScroll(ScrollView.FOCUS_DOWN);
}
});
Это то, что сработало для меня.
Ответ 3
это будет нормально
scrollView.post(new Runnable() {
@Override
public void run() {
scroll.scrollTo(0, scroll.getBottom());
}
});
Ответ 4
Эта работа для меня
scrollview.post(new Runnable() {
@Override
public void run() {
scrollview.fullScroll(ScrollView.FOCUS_DOWN);
}
});
Ответ 5
Вы пробовали scroll.fullScroll(View.FOCUS_DOWN)
?
Ответ 6
scrollView.post(new Runnable() {
@Override
public void run() {
scroll.scrollTo(0, scroll.getBottom());
}
});
это будет эффективно