Как найти нижнюю прокручиваемую позицию в ScrollView? - PullRequest
0 голосов
/ 27 декабря 2011

В android scrollView, как найти самую низкую позицию в scrollView, чтобы вы могли затем использовать метод scrollTo(x,y) для прокрутки вправо до низа. Мне нужно фактическое числовое значение . Использование метода getHeight() никогда не возвращает правильное значение. Полоса прокрутки иногда прокручивается до конца, а иногда и не доходит до нее. В scrollview есть линейное расположение с текстовым представлением. Должно быть что-то, чего мне не хватает?

Ответы [ 2 ]

1 голос
/ 27 декабря 2011

Спасибо за ответ.Я нашел быстрый взлом, если кому-то интересно.

sView.fullScroll(View.FOCUS_DOWN);
sView.fullScroll(View.FOCUS_DOWN);
y = sView.getScrollY();
sView.fullScroll(View.FOCUS_UP);

Это спрыгнет вниз к нижней части прокрутки, соберет y, а затем снова прыгнет вверх.Это происходит так быстро, что его не видно, и каждый раз получит нижнее значение y.Вы должны вызвать фокус вниз дважды, иначе у вернет 0.

1 голос
/ 27 декабря 2011

Если вы хотите просто прокрутить до конца, вы можете просто использовать fullScroll (ScrollView.FOCUS_DOWN).Если вам нужно особенно числовое значение, основанное на высоте представления прокрутки, вам придется создать подкласс своего представления прокрутки и переопределить onSizeChanged, что даст вам фактическую числовую высоту.Имейте в виду, что onSizeChanged будет вызываться только после onResume и не обязательно вызываться каждый раз, когда возобновляется ваша деятельность.

Часть причины, по которой вы иногда прокручиваете до конца, а иногда нет, возможно, из-засостояние гонки.Иногда ваша прокрутка происходит до того, как произошли другие важные вещи (например, заполнение представления), поэтому она, похоже, ничего не делает.

Попробуйте отправить ваши вызовы обработчику представления прокрутки:

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

Иногда может помочь даже добавление небольшой задержки:

yourScrollView.postDelayed(new Runnable(){
  @Override
  public void run(){
    yourScrollView.fullScroll(ScrollView.FOCUS_DOWN);
  }
}, 200);
...