Nir*_*raj 3 android staggered-gridview android-recyclerview
我正在玩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);
Run Code Online (Sandbox Code Playgroud)
这是我的自定义适配器的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);
}
Run Code Online (Sandbox Code Playgroud)
也许我错了(目前还没有关于此的良好文档),但我认为您无法使用此布局管理器实现这一点。交错布局管理器允许您将视图放置在跨度内,如果您放置的视图占据所有跨度,它将根据当前视图计算下一个视图的位置(而不考虑前一个视图)。
换句话说,如果你放置一个占据所有跨度的视图,布局管理器将为下一个视图找到最短的跨度,并且因为你用同一个视图占据了所有跨度,所以第一个跨度是候选者。
我希望这可以帮助你!
| 归档时间: |
|
| 查看次数: |
10063 次 |
| 最近记录: |