Android. Иметь полосу прокрутки, видимую только если ScrollView прокручивается - PullRequest
0 голосов
/ 18 октября 2019

Есть ли простой способ сделать полосу прокрутки в ScrollView видимой, только если вид прокручиваемый?

Я знаю, что этого можно добиться, сравнив высоту ScrollView и ViewGroup внутри, а затем звонит ScrollView.setScrollbarFadingEnabled(false);, но это много накладных расходов, и я чувствую, что должен быть более простой и чистый способ.

Ответы [ 2 ]

2 голосов
/ 18 октября 2019

Вы описываете нормальное поведение ScrollView. Если ScrollView не прокручивается, полоса прокрутки не появится. Даже android: fadeScrollbars = "false" не будет иметь никакого эффекта, если представление не прокручивается. Возможно, единственным потомком самого ScrollView является большой размер, чтобы поместиться в окне просмотра (или в контейнере ScrollView). В вашем случае ScrollView, кажется, всегда имеет полосу прокрутки. Вы можете проверить это, поместив простой TextView как дочерний элемент в ScrollView и отрегулировав высоту.

0 голосов
/ 18 октября 2019

Используйте 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);
        }
    } 
});

Это чистое решение IMO, и нет более простого способа, чем этот.

...