I am looking to create the following layout (red sqaures does not really have to be squares, a custom fixed height is also fine). The layout seems very simple yet I did not find a layout manager which suits my needs.
I tried the StaggeredGridLayoutManager but this only allows to set the span of either the column or the row, not both.
Is there floating around a custom layout manager which is able to do this? I have looked at TwoWayView but changing height seems to be problematic and the library is not being maintained.
Anyone having this problem and solved it?
A LayoutManager is responsible for measuring and positioning item views within a RecyclerView as well as determining the policy for when to recycle item views that are no longer visible to the user.
Span count refers to the number of columns. This is fairly clunky and doesn't take into account larger screen sizes or screen orientation. One approach is to create multiple layouts for the various screen sizes.
A little bit late, but it might help everyone else...
I was looking for the same and finally, after 2 days of googling I found a solution. Big thanks to Nick Butcher! His layout manager called SpannableGridLayoutManager
is capable of doing this. In my case I was doing a pattern like your first two rows:
Solution is easy:
1. Download SpannableGridLayoutManager from here
For some reason I had to change this line:
while (availableSpace > 0 && lastVisiblePosition < lastItemPosition) {
to
while (lastVisiblePosition < lastItemPosition) {
to got the manager working.
2. Set SpannableGridLayoutManger to your RecyclerView
In my case:
SpannedGridLayoutManager manager = new SpannedGridLayoutManager(
new SpannedGridLayoutManager.GridSpanLookup() {
@Override
public SpannedGridLayoutManager.SpanInfo getSpanInfo(int position) {
// Conditions for 2x2 items
if (position % 6 == 0 || position % 6 == 4) {
return new SpannedGridLayoutManager.SpanInfo(2, 2);
} else {
return new SpannedGridLayoutManager.SpanInfo(1, 1);
}
}
},
3, // number of columns
1f // how big is default item
);
Which gave me exactly what I wanted (numbers are position of item in adapter):
EDIT: error with styleable
Put those lines into attrs.xml
<declare-styleable name="SpannedGridLayoutManager">
<attr name="android:orientation" />
<attr name="spanCount" />
<attr name="aspectRatio" format="string" />
</declare-styleable>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With