Những gì tôi có ý định để đạt đượcRecyclerView ngang với chiều cao mục biến không gói đúng
Quan điểm mục nên chiếm toàn bộ chiều cao của mặt hàng đó
Nó có thể có thể là chiều cao của mặt hàng nhỏ hơn chiều cao của mặt hàng cao nhất trong recyclerview, trong trường hợp đó nó chỉ cần dính vào đỉnh như trong ảnh chụp màn hình ở trên.
Lỗi Tôi đang chạy vào
Như trong hình trên, quan điểm đang nhận được cắt ngắn.
Những gì tôi đã cố gắng cho đến nay
Ban đầu tôi đã đi với wrap_content trên recyclerview, bây giờ mà nó được hỗ trợ. Nó không hoạt động khi không có lượt xem nào hiển thị trên màn hình lúc đó là cao nhất. Điều này có ý nghĩa trong cách phân cấp khung nhìn. Làm thế nào chiều cao của một cái gì đó thậm chí không bị ràng buộc với bất kỳ dữ liệu nào được tính nếu chiều cao phụ thuộc vào dữ liệu đó?
thời gian Cách giải quyết: S
Thay vì cố gắng một LayoutManager tùy chỉnh, đầu tiên tôi đi với những gì tôi cảm thấy cần phải làm - lắp đặt tất cả quan điểm mục ngay từ đầu để tìm ra chiều cao của họ.
Có một thanh tiến trình và hoạt ảnh đang phát ở phần trên của màn hình để thu hút sự chú ý của người dùng trong khi tất cả điều này xảy ra với khả năng hiển thị recyclerview được đặt thành ẩn. Tôi sử dụng hai thứ, một thứ không đủ - tôi đã đính kèm một người quan sát trong cuộc gọi onViewAttached()
của bộ điều hợp và tôi cũng đã sử dụng một trình nghe thay đổi cuộn. Có một LinearSnapHelper được gắn vào khung nhìn của người tái chế để bám vào vị trí liền kề (tiếp theo hoặc trước đó, tùy thuộc vào hướng cuộn) trên cuộn giấy.
Trong thiết lập này,
- tôi sẽ cho mỗi vị trí trong recyclerview sử dụng
layoutManager.smoothScrollToPosition()
Lấy chiều cao xem con sử dụng
View currentChildView = binding.nextRv.getChildAt(layoutManager.findFirstCompletelyVisibleItemPosition()); if (currentChildView != null) { currentChildHeight = currentChildView.getHeight(); }
trong người nghe thay đổi cuộn trên RecyclerView.SCROLL_STATE_IDLE
hoặc bằng cách chuyển chiều cao cho người quan sát đã xem được đề cập ở trên trong onVie của bộ điều hợp wAttachedToWindow()
@Override
public void onViewAttachedToWindow(BindingViewHolder holder) {
if (mObserver != null) {
mObserver.onViewAttached(holder.binding.getRoot().getHeight());
}
}
- Lưu trữ một
maxHeight
rằng những thay đổi để tối đa của maxHeight và chiều cao của đứa trẻ mới.
Như được hiển nhiên, điều này thật xấu. Thêm vào đó nó không cho tôi chiều cao của khung nhìn hiện tại - onAttached có nghĩa là nó chỉ gắn liền, không được đo lường và đặt ra. Đây là chế độ xem được tái chế, không phải chế độ xem được liên kết với mục dữ liệu hiện tại. Hiển thị các vấn đề như cắt bớt chế độ xem được minh họa ở trên.
Tôi cũng đã cố gắng chiều cao wrap_content trên quan điểm tái chế và hủy bỏ hiệu lực từ cha mẹ tái chế của cho đến khi tái chế và đứa trẻ trên cuộn đến SCROLL_STATE_IDLE. Không hoạt động.
Tôi không chắc chắn cách bố cục tùy chỉnh có thể trợ giúp tại đây.
Ai đó có thể hướng dẫn tôi đi đúng hướng không?
bạn có thể thêm tệp xml của mình – Redman
Vui lòng tìm nó ở đây (https://gist.github.com/adroitandroid/85e7a66d7f796379649c2d9eab26cf76) –
Recyclerview được đề cập là thẻ có id "next_rv".Trên thực tế cho các giải pháp chi tiết ở trên, ban đầu tôi đã đặt nó để chiều cao match_parent và sau đó thiết lập lại chiều cao cho 'maxHeight' thu được –