2013-10-21 2 views
7

현재 ScrollView이 스크롤 가능한지 여부를 확인하는 방법은 궁금합니다. 그것은 canScroll 또는 isScrollable라고하는 public method가 ScrollView에없는 것 같습니다.ScrollView가 스크롤 가능한지 확인하는 방법

Scrollable : 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()을 대신하지만 아이디어는 동일합니다.

관련 문제