Как программно прокрутить ScrollView к низу - PullRequest
42 голосов
/ 05 ноября 2011

У меня есть проблема, которую я не могу решить: внутри ScrollView у меня есть только LinearLayout.По действию пользователя я программно добавляю 2 TextView для этого LinearLayout, но по умолчанию свиток остается наверху.Так как я контролирую действия пользователя, мне будет легко прокрутить до конца что-то вроде:

ScrollView scroll = (ScrollView) this.findViewById(R.id.scroll);
scroll.scrollTo(0, scroll.getBottom());

Но на самом деле нет.Потому что сразу после добавления этих двух новых элементов getBottom () по-прежнему возвращает предыдущие два.Я пытался обновить состояние, вызывая refreshDrawableState(), но у меня ничего не получается.

Есть ли у вас какие-либо идеи, как я могу получить реальное дно ScrollView после добавления некоторых элементов?

Ответы [ 5 ]

98 голосов
/ 19 апреля 2012

Вам нужно выполнить прокрутку в отдельном потоке, иначе она не будет работать. Попробуйте это:

scrollView.post(new Runnable() {
    @Override
    public void run() {
        scrollView.fullScroll(ScrollView.FOCUS_DOWN);
    }
});

Это то, что у меня сработало.

64 голосов
/ 05 мая 2012

Это на самом деле не отвечает на ваш вопрос.Но это альтернатива, которая в значительной степени делает то же самое.

Вместо прокрутки к нижней части экрана, измените фокус на вид, который находится в нижней части экрана.

То есть, заменить:

scroll.scrollTo(0, scroll.getBottom());

на:

Footer.requestFocus();

Убедитесь, что вы указываете, что представление, скажем, «Нижний колонтитул» является фокусируемым.

android:focusable="true"
android:focusableInTouchMode="true"
17 голосов
/ 25 июня 2012

все будет хорошо

scrollView.post(new Runnable() {
    @Override

    public void run() {

        scroll.scrollTo(0, scroll.getBottom());

    }
});
3 голосов
/ 05 ноября 2011

Вы пробовали scroll.fullScroll(View.FOCUS_DOWN)?

0 голосов
/ 29 мая 2018

Вы можете применить это также

 mScrollviewHomepage.setScrollY(View.FOCUS_DOWN);
...