8

У меня есть RecyclerView и GridLayoutManager с 2 столбцами. Как заставить LayoutManager соответствовать шаблону на первом снимке экрана? Теперь у меня есть результат, как на 2-м скриншоте.Различные (динамические) высоты элементов в GridLayoutManager

нужен результат:

Текущего результата:

ответ

18

GridLayoutManager будет использовать сетку, и вы можете установить некоторую пядь, но не разную высоту для различных ячеек.

Что вы хотите, это StaggeredGridLayoutManager. Это просто поместит элементы на экран, если они подойдут, что приведет к вашему нужному результату. Вы также можете изменить поведение переупорядочения, если хотите, используя setGapStrategy.

+0

Большое спасибо! – BlizzedRu

+0

«но не разные высоты для разных ячеек». вы можете установить разную высоту строк; например, каждая ячейка имеет представление изображения с высотой, установленной в wrap_content, и в каждой ячейке устанавливаются разные изображения, тогда каждая строка будет занимать высоту самых больших изображений –

4

Это действительно легко. Вы должны добавить менеджера RecycleView:

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

в моем случае это выглядит следующим образом:

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));