2015-07-30 15 views
9

Tôi đang triển khai RecyclerView trong ứng dụng của mình để hiển thị danh sách nội dung. Trên LG Nexus 5 của tôi (Android 5.1 M), nếu tôi đặt sdk mục tiêu thành 16 hoặc 17 (về cơ bản để mô phỏng những gì đang xảy ra trên những điện thoại này với api 16, 17), chiều cao hàng của danh sách thay đổi đáng kể.RecyclerView vấn đề chiều cao trong API 17 và API 16 - Android

Tuy nhiên, điều này không xảy ra trên API 18 hoặc 18+. Tôi thực sự không thể hiểu tại sao điều này xảy ra và cách tiếp cận tối ưu để giải quyết vấn đề này là gì.

One More Thing: tôi sử dụng một ImageView bên trong hàng danh sách. Điều này xảy ra khi trong số ImageView tôi đang tải hình ảnh từ máy chủ. Tôi sử dụng thư viện ImageLoader để thực hiện việc này. Tuy nhiên nếu tôi sử dụng hình ảnh tĩnh, sau đó tôi không có vấn đề này

+1

để không ai đã gặp phải vấn đề này trước đây chưa? – stud91

+1

Bạn có thể dán bố cục xml hàng của mình không? – lgvalle

+0

Vui lòng dán style.xml của bạn quá –

Trả lời

4

"nếu tôi sử dụng hình ảnh tĩnh, sau đó tôi không có vấn đề này" Khi sử dụng hình ảnh tĩnh, chúng được nạp vào trong onLayout() cho ImageView của bạn . Khi hình ảnh được tải trong khi bố trí, hình ảnh sẽ ảnh hưởng đến kích thước được đo trong đường chuyền onMeasure().

Khi hình ảnh không được đặt tĩnh (ví dụ: kéo xuống qua mạng không đồng bộ), ImageView không thể dựa vào kích thước của hình ảnh để xác định kích thước đo được của nó. Khi hình ảnh được tải, nó sẽ được thu nhỏ để vừa với khoảng hiện tại được đo ImageView.

Giải pháp:

  • Chỉ định minHeight trên ImageView hoặc hàng của bạn bố trí
  • HOẶC Xác định chiều cao cố định trên ImageView hoặc hàng của bạn bố trí

Nếu bạn biết những gì kích thước bạn muốn cho hàng của bạn, bạn nên sử dụng chiều cao cố định.

Có các kiểu mặc định cho RecyclerView có thể đặt các thuộc tính như minHeight cho bố cục hàng của bạn có thể khác nhau giữa các phiên bản API. Do đó, nếu không tự đặt chính xác một hoặc cố định minHeight, bạn có thể thấy hành vi khác nhau trên các phiên bản API.

+1

Lưu ý: Đã xảy ra sự cố đã biết với minHeight trên RecyclerView: https://code.google.com/p/android/issues/detail?id=74772 –

1

Tôi cũng gặp vấn đề với chiều cao của recyclerView vì vậy đã tìm thấy giải pháp. Cung cấp chiều cao từ mã java. Nó làm việc cho tôi.

recyclerView.getViewTreeObserver().addOnGlobalLayoutListener(
 
    new OnGlobalLayoutListener() { 
 
\t @Override 
 
\t public void onGlobalLayout() { 
 
\t // TODO Auto-generated method stub 
 
\t 
 
     //use your layout 
 
recyclerTagScroll.getViewTreeObserver().removeGlobalOnLayoutListener(this); 
 

 
\t \t RelativeLayout.LayoutParams params = (android.widget.RelativeLayout.LayoutParams) recyclerTagScroll 
 
\t \t \t \t \t .getLayoutParams(); 
 

 
\t \t params.height = recyclerTagScroll.getChildAt(0).getHeight(); 
 
\t \t recyclerTagScroll.setLayoutParams(params); 
 
\t } 
 
});

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