Android。仅当 ScrollView 可滚动时滚动条才可见
Android. Have scrollbar only visible if ScrollView is scrollable
有没有简单的方法让 ScrollView
中的滚动条仅在视图可滚动时可见?
我知道可以通过比较 ScrollView
和里面的 ViewGroup
的高度然后调用 ScrollView.setScrollbarFadingEnabled(false);
来实现
但它的开销很大,我觉得应该有一种更简单、更干净的方法。
使用 ViewTreeObserver 获取高度,因为它会在布局/视图改变可见性时调用,否则高度可能为 0。
ScrollView scrollView = (ScrollView)findViewById(R.id...);
ViewTreeObserver observer = scrollView.getViewTreeObserver();
observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int viewHeight = scrollView.getMeasuredHeight();
int contentHeight = scrollView.getChildAt(0).getHeight();
if(viewHeight - contentHeight < 0) {
ScrollView.setVerticalScrollBarEnabled(false);
}
}
});
在我看来,这是一个干净的解决方案,没有比这更简单的方法了。
您描述的是 ScrollView 的正常行为。如果 ScrollView 不可滚动,则 ScrollBar 不会出现。如果视图不可滚动,即使 android:fadeScrollbars="false" 也不会生效。
也许 ScrollView 本身的唯一 child 太大以适应视口(或 ScrollView 容器)在你的情况下,ScrollView 似乎总是有一个滚动条。您可以通过将简单的 TextView 作为 child 放入 ScrollView 并调整高度来测试它。
有没有简单的方法让 ScrollView
中的滚动条仅在视图可滚动时可见?
我知道可以通过比较 ScrollView
和里面的 ViewGroup
的高度然后调用 ScrollView.setScrollbarFadingEnabled(false);
来实现
但它的开销很大,我觉得应该有一种更简单、更干净的方法。
使用 ViewTreeObserver 获取高度,因为它会在布局/视图改变可见性时调用,否则高度可能为 0。
ScrollView scrollView = (ScrollView)findViewById(R.id...);
ViewTreeObserver observer = scrollView.getViewTreeObserver();
observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
int viewHeight = scrollView.getMeasuredHeight();
int contentHeight = scrollView.getChildAt(0).getHeight();
if(viewHeight - contentHeight < 0) {
ScrollView.setVerticalScrollBarEnabled(false);
}
}
});
在我看来,这是一个干净的解决方案,没有比这更简单的方法了。
您描述的是 ScrollView 的正常行为。如果 ScrollView 不可滚动,则 ScrollBar 不会出现。如果视图不可滚动,即使 android:fadeScrollbars="false" 也不会生效。 也许 ScrollView 本身的唯一 child 太大以适应视口(或 ScrollView 容器)在你的情况下,ScrollView 似乎总是有一个滚动条。您可以通过将简单的 TextView 作为 child 放入 ScrollView 并调整高度来测试它。