2013-10-21 69 views
7

我想知道,如何檢查當前的ScrollView是否可以滾動?看來,在ScrollView中沒有公開的方法稱爲canScrollisScrollable如何檢查ScrollView是否可滾動

可滾動:您可以向上和向下移動ScrollView中的ViewGroup,並且滾動條在上下移動時可見。所以,如果ScrollView中只有很少的行,並且它們可以放在單個屏幕內,那麼ScrollView不可滾動。

+0

定義「滾動」 – njzk2

+0

滾動 - 你可以上下移動ScrollView中的ViewGroup,並且當您上下移動滾動條時可以看到。 –

+0

這就是scrollview是關於什麼,我不明白你的問題 – njzk2

回答

15

你可以做一些小數學計算視圖原始高度和內容的高度。如果這個高度的差值是< 0,則該視圖是可滾動的。

要計算原始高度,您可以使用View.getMeasuredHeight()。 因爲ScrollView是一個ViewGroup並且有最多一個孩子,所以用ViewGroup.getChildAt(0).getHeight()獲得那個孩子的身高;

使用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) { 
      // scrollable 
     } 
    } 
}); 
+0

是否有任何理由使用scrollView.getChildAt(0).getHeight();而不是scrollView.getChildAt(0).getMeasuredHeight(); –

+0

@CheokYanCheng在這種情況下,這種方法沒有區別。正如我測試它的值是相等的。但是,如果您在Java代碼中更改佈局參數,請使用getHeight()來確保正確的值返回。 –

0

我想我可能失去了一些東西,但它不應該是簡單的檢查,如果

scrollView.getHeight() >= parentView.getMeasuredHeight() 

你可能確實需要:scrollView.getChildAt(0).getHeight()和/或parentView.getHeight()代替,但這個想法是一樣的。

相關問題