2010-02-10 12 views
20

Tôi có một TextView toàn màn hình giữ một Spanned dài đòi hỏi phải di chuyển. GetLineCount của TextView() cho tôi tổng số dòng được sử dụng cho toàn bộ khối văn bản nhưng tôi muốn biết có bao nhiêu dòng văn bản hiện đang hiển thị trên màn hình.Có cách nào để truy xuất số lượng dòng hoặc phạm vi hiển thị của TextView không?

Hoặc, tốt hơn, có cách nào để tìm ra phạm vi các đường hiện có thể nhìn thấy trên màn hình không? Ví dụ: khi cuộn chế độ xem, tôi có thể nói rằng các dòng 20-60 hiện có thể nhìn thấy không?

Trả lời

29

tôi đã tìm ra câu trả lời:

int height = myTextView.getHeight(); 
int scrollY = myTextView.getScrollY(); 
Layout layout = myTextView.getLayout(); 

int firstVisibleLineNumber = layout.getLineForVertical(scrollY); 
int lastVisibleLineNumber = layout.getLineForVertical(scrollY+height); 
+2

'getLayout() 'trả về NULL –

+1

@MrSuS nó trả về null nếu bạn muốn lấy nó trước khi View được đặt ra. –

+2

Tôi đã thử sử dụng mã được đề cập ở trên nhưng nó trả về số dòng sai khi sử dụng theo hướng ngang. Ngoài ra một số dòng một phần có thể nhìn thấy được. – user2538359

4

Để làm cho họ làm việc, bạn nên viết mã đăng bởi @Robert theo cách này:

ViewTreeObserver vto = txtViewEx.getViewTreeObserver(); 
     vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
      @Override 
      public void onGlobalLayout() { 
       ViewTreeObserver obs = txtViewEx.getViewTreeObserver(); 
       obs.removeOnGlobalLayoutListener(this); 
       height = txtViewEx.getHeight(); 
       scrollY = txtViewEx.getScrollY(); 
       Layout layout = txtViewEx.getLayout(); 

       firstVisibleLineNumber = layout.getLineForVertical(scrollY); 
       lastVisibleLineNumber = layout.getLineForVertical(height+scrollY); 

      } 
     }); 
Các vấn đề liên quan