Подтвердить что ты не робот

Как программно прокрутить ScrollView до нижнего уровня

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

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

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

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

4b9b3361

Ответ 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());
  }
});

это будет эффективно