2013-10-21 17 views
7

Tôi đã tự hỏi, làm cách nào để kiểm tra xem hiện tại ScrollView có thể cuộn được không? Có vẻ như, không có phương pháp công khai nào được gọi là canScroll hoặc isScrollable trong ScrollView.Cách kiểm tra xem ScrollView có cuộn được không

Có thể cuộn: Bạn có thể di chuyển ViewGroup bên trong ScrollView lên và xuống và thanh cuộn sẽ hiển thị khi bạn di chuyển lên và xuống. Vì vậy, nếu chỉ có một số hàng nhỏ trong số ScrollView và chúng có thể vừa với một màn hình, thì ScrollView sẽ không thể cuộn được.

+0

xác định 'cuộn' – njzk2

+0

cuộn - Bạn có thể di chuyển ViewGroup bên trong ScrollView lên và xuống, và thanh cuộn sẽ hiển thị khi bạn di chuyển nó lên và xuống. –

+0

đó là những gì một scrollview là về, tôi không nhận được câu hỏi của bạn – njzk2

Trả lời

15

Bạn có thể thực hiện một số phép tính nhỏ để tính chiều cao nguyên lượt xem và chiều cao của nội dung. Nếu độ chênh lệch của độ cao này là < thì chế độ xem có thể cuộn được.

Để tính chiều cao thô bạn có thể sử dụng View.getMeasuredHeight(). Bởi vì ScrollView là một ViewGroup và có tối đa một đứa trẻ, có được chiều cao của đứa trẻ đó với ViewGroup.getChildAt(0).getHeight();

Sử dụng một ViewTreeObserver để có được những đỉnh cao, bởi vì nó sẽ được gọi là tại thời điểm bố trí/xem đang thay đổi tầm nhìn, nếu không thì chiều cao có thể là 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

Có bất kỳ lý do bằng cách sử dụng scrollView.getChildAt (0) .getHeight(); và không phải scrollView.getChildAt (0) .getMeasuredHeight(); –

+0

@CheokYanCheng Trong trường hợp này, không có sự khác biệt giữa các phương pháp này. Như tôi đã thử nghiệm, các giá trị bằng nhau. Nhưng nếu bạn thay đổi các tham số bố trí trong mã Java sử dụng getHeight() để chắc chắn, các giá trị đúng sẽ trả lại. –

0

Tôi nghĩ rằng tôi có thể thiếu một cái gì đó, nhưng không nên nó đơn giản như kiểm tra nếu

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

bạn có thể thực sự cần: scrollView.getChildAt(0).getHeight() và/hoặc parentView.getHeight() thay vào đó, nhưng ý tưởng là như nhau.

Các vấn đề liên quan