Different (dynamic) items height in GridLayoutManager
Asked Answered
S

2

26

I have a RecyclerView and GridLayoutManager with 2 columns. How can I force LayoutManager to be according with template on the first screenshot? Now I have result as on the 2th screenshot.

Need result:

Current result:

Stephaniestephannie answered 24/1, 2016 at 17:5 Comment(0)
C
37

GridLayoutManager will use a grid, and you can set some span, but not different heights for different cells.

What you want is a StaggeredGridLayoutManager. This will just put the items on the screen if they fit, leading to your needed result. You can also change the reordering behavior, if you want to, by using setGapStrategy.

Cerellia answered 24/1, 2016 at 18:13 Comment(3)
"but not different heights for different cells." you can set different height of rows, though; for example each cell has image view with height set to wrap_content and different images are set in each cell then each row will take the height of the biggest imagesCharioteer
how can i achieve horizontal dynamic size for vertical staggered grid layout items? or in other words, Suppose i have 2 columns in staggered grid layout. Can i change columns width dynamically?Myrlemyrlene
@JaydipKalkani Try this SpannableGridLayout Manager 1 or this SpannableGridLayout Manager 2Leukoderma
L
9

It's really easy. You have to add this manager to RecycleView:

recyclerView.setLayoutManager(new StaggeredGridLayoutManager(mColumnCount, 1));

in my case it's look like this:

Context context = view.getContext();
RecyclerView recyclerView = (RecyclerView) view;

if (mColumnCount <= 1) {
    recyclerView.setLayoutManager(new LinearLayoutManager(context));
} else {
    recyclerView.setLayoutManager(new StaggeredGridLayoutManager(mColumnCount, 1));
}
recyclerView.setAdapter(new MyItemRecyclerViewAdapter(DummyContent.ITEMS, mListener));
Literality answered 15/11, 2016 at 10:15 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.