Tôi đang sử dụng bố cục chế độ xem trình thu thập so le cho một danh sách ảnh. Tôi muốn khoảng cách ở hai bên bằng không trong khi vẫn còn khoảng cách giữa hai cột. Tôi đang sử dụng một lớp phụ trang trí mục để có khoảng cách được nhìn thấy trong ảnh đính kèm. Tôi biết tôi có quyền kiểm soát khoảng cách bên trái và bên phải nhưng vấn đề là tôi không bao giờ biết được hình ảnh của cột đó. Có vẻ như trình quản lý bố cục bị so le thực hiện một số sắp xếp lại của riêng nó. Tôi đã thử sử dụng getChildAdapterPosition
nhưng có vẻ như trả về vị trí trong mảng nguồn dữ liệu chứ không phải vị trí thực tế của ảnh trong bố cục. Bất kỳ ý tưởng làm thế nào tôi nên tiếp cận này? Cách xác định vị trí cột trong trình quản lý bố cục lưới so le
Trả lời
Tôi đã cố gắng làm cho nó hoạt động. Vì vậy, trong trường hợp của tôi, tôi không cần bất kỳ biên giới trên các cạnh bên trái và bên phải của màn hình sau đó. Tôi chỉ cần biên giới ở giữa và ở phía dưới. Giải pháp là lấy các tham số bố cục của khung nhìn có kiểu StaggeredGridLayoutManager.LayoutParams. Trong các tham số đó, bạn có thể nhận được spanIndex cho bạn biết chỉ mục nào là view. Vì vậy, nếu bạn có một spanCount 2, quan điểm trái sẽ có một spanIndex từ 0 và chánh kiến sẽ có một spanIndex của 1.
Đây là mã của tôi như vậy có lẽ nó sẽ giúp bạn
public class SpaceItemDecoration extends RecyclerView.ItemDecoration {
private int space;
public SpaceItemDecoration(int space) {
this.space = space;
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
int position = parent.getChildAdapterPosition(view);
StaggeredGridLayoutManager.LayoutParams lp = (StaggeredGridLayoutManager.LayoutParams)view .getLayoutParams();
int spanIndex = lp.getSpanIndex();
if(position > 0){
if(spanIndex == 1){
outRect.left = space;
} else{
outRect.right = space;
}
outRect.bottom = space * 2;
}
}
}
Trong trường hợp của tôi đầu tiên tôi phải lấy vị trí từ chỉ mục 0 Tôi có chế độ xem tiêu đề không có bất kỳ đường viền nào. Sau đó tôi nhận được chỉ số nhịp và tùy thuộc vào nó, tôi thiết lập đường viền mà tôi cần trên khung nhìn đó. Và cuối cùng, tôi đặt đường viền dưới cùng trên mỗi chế độ xem.
Cảm ơn bạn, tôi đã cố gắng để hack này cho bố trí của tôi, trong đó có một loại xem tiêu đề, loại xem tiêu đề phụ và loại xem mục.Đây là giải pháp thực sự thanh lịch và cũng hoạt động với GridLayoutManager thông thường. – kvgr
Bạn có ví dụ làm việc về mã này không? Tôi đã cố gắng trong dự án của tôi, vì một số lý do tôi không hiểu, spanIndex luôn luôn là 0. Có vẻ như StaggeredGridLayoutManager gọi getItemOffsets trước khi nó quyết định khoảng thời gian mà view con thuộc về. – LiuJian
Nó hoạt động như một nét duyên dáng ................... – Vicky
vì vậy một giải pháp tôi có thể sử dụng là với một công cụ trang trí mặt hàng nhưng nó chắc chắn là một cảm giác kỳ quặc/khó hiểu.
Về cơ bản, bạn sẽ điều chỉnh hình chữ nhật ngoài của mục dựa trên vị trí cột của nó (hoặc thứ gì đó tương tự). Sự hiểu biết của tôi là hình chữ nhật bên ngoài là nhiều hay ít khoảng cách bạn muốn thay đổi. Cho đoạn code dưới đây thử xem, rõ ràng là bạn sẽ cần phải thực hiện điều chỉnh và logic của riêng bạn để 'tính toán' mà cột mục trên nhưng điều này cũng đủ để hình dung nó ra, hy vọng:
recyclerView.addItemDecoration(new RecyclerView.ItemDecoration() {
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
int left = outRect.left;
int right = outRect.right;
int top = outRect.top;
int bottom = outRect.bottom;
int idx = parent.getChildPosition(view);
int perRow = gridLayoutManager.getSpanCount();
int adj = blahh... // some adjustment
if (idx < itemsPerRow) {
// on first row, adjust top if needed
}
if(idx % perRow == 0){
// on first column, adjust. Left magically adjusts bottom, so adjust it too...
left += adj;
bottom -= adj;
}
if(idx % itemsPerRow == perRow - 1){
// on last column, adjust. Right magically adjusts bottom, so adjust it too...
right += adjustment;
bottom -= adjustment;
}
outRect.set(left, top, right, bottom);
}
});
Again này là hacky và mất một số thử nghiệm và lỗi để có được quyền.
Một giải pháp khác mà tôi đã thử với một số thành công là xác định các chế độ xem khác nhau cho các cột khác nhau. Trong trường hợp của bạn, các cột sẽ có lượt xem với các lề khác nhau, tiêu cực, ở bên trái và bên phải để có được hiệu ứng bạn muốn.
Lưu ý phụ, tôi cho rằng bạn đang sử dụng độ cao trên chế độ xem thẻ. Một điều tôi đã nhận thấy là nếu xem thẻ không có độ cao và thay vào đó bạn xử lý nó cho mình (yeah, tôi biết, không phải là điểm để không xử lý độ cao chính mình) nhiều khó khăn này biến mất và mọi thứ bắt đầu cư xử , có thể do tính toán độ cao/bóng. Nhưng dù sao ... Hy vọng điều này là ít nhất một chút hữu ích ...
Hey, nơi 'itemsPerRow'instantiated? Cảm ơn bạn –
- 1. Trình quản lý bố cục jQuery
- 2. Sử dụng vị trí cố định với khung bố cục lưới
- 3. Nhiều Trình quản lý bố cục trong Java
- 4. Magento vị trí cột lưới
- 5. Quản lý bố cục bên trong Radiogroup định hướng ngang
- 6. Trình quản lý bố cục ưa thíchSize Java
- 7. iPhone - Trình quản lý bố cục cho UIViews?
- 8. Bố cục với vị trí động
- 9. Xác định vị trí "const" trong tuyên bố
- 10. Cách đặt hàng và cột của tiện ích trong bố cục lưới?
- 11. Trình quản lý bố cục Java Trung tâm dọc
- 12. Quản lý tệp mặc định của Studio lưu vị trí
- 13. Quản lý bố cục Android, phải có cách tốt hơn
- 14. Bố cục lưới Vs. Bố cục bảng
- 15. cách phát triển UICollectionViewLayout tùy chỉnh có các cột so le với các ô tự định kích thước?
- 16. Thay đổi trình quản lý bố cục cho các chế độ xem khác nhau trong RecyclerView
- 17. Tần suất cập nhật Trình quản lý vị trí, iphone
- 18. iOS Đang chờ Trình quản lý vị trí thành Init
- 19. Bố cục trong chương trình Win32 GUI
- 20. igraph: nhãn định vị và loại bỏ không gian trống trong bố trí lưới
- 21. Lỗi Trình quản lý Vị trí: (KCLErrorDomain error 0)
- 22. Sửa vị trí nút trong Bố cục có hướng D3
- 23. Remove khoảng cách mặc định theo quan điểm tái chế bố trí lưới
- 24. Xác định vị trí địa lý trong văn bản
- 25. Bố cục 3 Cột - Không có Cột
- 26. Vị trí chính xác của một Nút bên trong Bố cục
- 27. Cách đặt vị trí hàng và cột lưới theo lập trình
- 28. UL + CSS cho bố trí lưới
- 29. Bố cục xây bằng lưới css
- 30. Xác định vị trí một cách hiệu quả các cột cố định nhóm trong một data.frame
Đó là những gì tôi hiện đang cố gắng tìm ra. Người quản lý đặt các khung nhìn tùy thuộc vào kích thước của chúng, và bạn sẽ không bao giờ chắc chắn rằng ví dụ các vị trí lẻ sẽ nằm ở bên trái và ngay cả các vị trí sẽ nằm ở bên phải. Đó là cách tôi cố gắng giải quyết nó trong trang trí mục của tôi, bằng cách kiểm tra vị trí% 2 == 0 và sau đó đặt lề rect.left ... nhưng nó không hoạt động như vậy vì trong một số trường hợp, mục có vị trí 6 có thể nằm trên bên phải và đôi khi ở bên trái. – Tooroop