Я играю с StaggeredGridLayoutManager, и у меня есть что-то близкое к тому, что я хочу. У меня есть горизонтальная шахматная сетка с 2 строками, где некоторые элементы имеют высоту 1 строки, а другие охватывают обе строки. Я хочу, чтобы элементы с одной высотой строки складывались, и я подумал, что этого можно добиться, установив для стратегии разрыва значение GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS, но, похоже, это не работает.
Текущий:
___ ___ ___ ___ |___| | | |___| | | | | | | |___| |___|
Что я хочу:
___ ___ ___ |___| | | | | ___ | | | | |___| |___| |___|
Соответствующие фрагменты кода:
Настройка менеджера компоновки для recyclerview:
StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.HORIZONTAL);
layoutManager.setGapStrategy(StaggeredGridLayoutManager.GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS);
recyclerView.setLayoutManager(layoutManager);
Вот onBindViewHolder для моего пользовательского адаптера (это просто упрощенный пример). В основном у меня есть ImageView внутри CardView (для CardView установлено значение wrap_content для высоты и ширины).
if(position%3==0) {
ViewGroup.LayoutParams layoutParams = viewHolder.myImage.getLayoutParams();
layoutParams.width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 200, context.getResources().getDisplayMetrics());
layoutParams.height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 75, context.getResources().getDisplayMetrics());
viewHolder.myImage.setLayoutParams(layoutParams);
StaggeredGridLayoutManager.LayoutParams layoutParams1 = ((StaggeredGridLayoutManager.LayoutParams) viewHolder.itemView.getLayoutParams());
layoutParams1.setFullSpan(false);
}
else {
ViewGroup.LayoutParams layoutParams = viewHolder.myImage.getLayoutParams();
layoutParams.width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 200, context.getResources().getDisplayMetrics());
layoutParams.height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 200, context.getResources().getDisplayMetrics());
viewHolder.myImage.setLayoutParams(layoutParams);
StaggeredGridLayoutManager.LayoutParams layoutParams1 = ((StaggeredGridLayoutManager.LayoutParams) viewHolder.itemView.getLayoutParams());
layoutParams1.setFullSpan(true);
}