【发布时间】:2014-11-11 01:30:06
【问题描述】:
我正在使用 StaggeredGridLayoutManager 并有一些接近我想要的东西。我有一个 2 行的水平交错网格,其中一些项目是 1 行的高度,而其他项目跨越两行。我希望单行高度项目堆叠起来,我认为可以通过将间隙策略设置为 GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS 来实现,但这似乎不起作用。
当前:
___ ___ ___ ___ |___| | | |___| | | | | | | |___| |___|我想要什么:
___ ___ ___ |___| | | | | ___ | | | | |___| |___| |___|相关代码sn-ps:
为recyclerview设置布局管理器:
StaggeredGridLayoutManager layoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.HORIZONTAL);
layoutManager.setGapStrategy(StaggeredGridLayoutManager.GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS);
recyclerView.setLayoutManager(layoutManager);
这是我的自定义适配器的 onBindViewHolder(这只是一个简化的示例)。基本上我在 CardView 中有一个 ImageView(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);
}
【问题讨论】:
-
如何使这种布局的项目跨越两行? - 我目前正在尝试通过垂直滚动来实现这一点 - 2 列,其中第一项应表示跨越两列的“标题”。
-
啊!没关系。它是 [layoutParams.setFullSpan(true)]
-
在 onBindViewHolder 上执行此操作很重要,因为这是视图应用了 StaggeredGridLayoutManager.LayoutParams 的第一个位置。虽然,这很奇怪……那个方法应该只用于绑定。
标签: android android-recyclerview staggered-gridview