Как проверить, что ScrollView
выше экрана? Когда содержимое ScrollView
подходит к экрану, ScrollView не прокручивается, когда содержимое превышает высоту экрана, прокручиваемое.
Как я могу проверить условие ScrollView
в этом отношении?
Убедитесь, что ScrollView выше, чем экран/прокручиваемый
Ответ 1
Это код из ScrollView, который является приватным, но может быть адаптирован для использования вне самого класса
/**
* @return Returns true this ScrollView can be scrolled
*/
private boolean canScroll() {
View child = getChildAt(0);
if (child != null) {
int childHeight = child.getHeight();
return getHeight() < childHeight + mPaddingTop + mPaddingBottom;
}
return false;
}
Ответ 2
Слишком поздно, но я использую следующий код, и он выглядит более безопасным для меня:
if (view.canScrollVertically(1) || view.canScrollVertically(-1)) {
// you code here
}
Ответ 3
В ScrollView всегда есть 1 ребенок. Все, что вам нужно сделать, это получить высоту ребенка
int scrollViewHeight = scrollView.getChildAt(0).getHeight();
и вычислить высоту экрана
если оба они равны (или scrollView Height больше), то он подходит на вашем экране.
Ответ 4
В моем случае я проверял, был ли мой scrollView (который содержал текст) прокручиваться по вертикали при создании действия. На телефонах это прокручивается, а на планшетах - нет. canScrollVertically
возвращал мне неверное значение, потому что оно еще не было определено. Я исправил эту проблему, вызвав ее в OnGlobalLayoutListener
.
(Котлин)
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
// Must use onGlobalLayout or else canScrollVertically will not return the correct value because the layout hasn't been made yet
scrollView.viewTreeObserver.addOnGlobalLayoutListener(object : ViewTreeObserver.OnGlobalLayoutListener {
override fun onGlobalLayout() {
// If the scrollView can scroll, disable the accept menu item button
if ( scrollView.canScrollVertically(1) || scrollView.canScrollVertically(-1) )
acceptMenuItem?.isEnabled = false
// Remove itself after onGlobalLayout is first called or else it would be called about a million times per second
scrollView.viewTreeObserver.removeOnGlobalLayoutListener(this)
}
})
}
В моем случае использовались условия использования. Я не хотел, чтобы кнопка подтверждения была включена, пока пользователь не прокрутил до конца. Я знаю, что уже поздно, но я надеюсь, что это разрешит некоторую путаницу в отношении canScrollVertically