我正在用回收视图和网格布局管理器实现android中的仪表板,其中包含3项。我将从服务器获取仪表板项目。根据项目编号,我需要将回收项目调整为中心。例如,如果我有11个项目,我需要调整最后两个项目与中心。如果我有,10个项目,最后一个项目需要对齐中心。对于这个逻辑,我做了大量的研究,但没有找到任何解决办法。甚至我也尝试使用GridLayoutManager的spansize概念,但是没有运气。任何帮助/示例代码都是非常感谢的。提前感谢
发布于 2018-01-30 18:18:52
如果我正确地理解了您的需求,就无法用RecyclerView + GridLayoutManager实现您想要的结果。即使您实现了一个自定义的GridLayoutManager.SpanSizeLookup,您也只能让您的额外的一两项扩展来填充行.你不能把它们集中起来。
但是,您可以通过使用RecyclerView和FlexboxLayoutManager来实现您想要的结果,这是谷歌FlexboxLayout项目:https://github.com/google/flexbox-layout的一部分。
创建FlexboxLayoutManager时,需要将FlexDirection设置为"row“,将JustifyContent设置为”中间“:
FlexboxLayoutManager manager = new FlexboxLayoutManager(this, FlexDirection.ROW);
manager.setJustifyContent(JustifyContent.CENTER);然后,在创建ViewHolder时,需要将其大小调整到RecyclerView宽度的三分之一:
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
View itemView = inflater.inflate(R.layout.item_view, parent, false);
ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) itemView.getLayoutParams();
layoutParams.width = (parent.getWidth() / 3) - layoutParams.leftMargin - layoutParams.rightMargin;
itemView.setLayoutParams(layoutParams);
return new MyViewHolder(itemView);
}下面是一个用于演示以下内容的小型应用程序gist的链接:https://gist.github.com/zizibaloob/0c44bfe59b371b5ae0bd2edcb4a7e592
发布于 2018-01-30 18:31:02
在您的spanSizeLookup上设置GridLayoutManage
gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
if(ItemList.size() % 3 == 0){
return 3;
} else if( ItemList.size() % 3 == 2){
return 2;
} else{
return 1; // number of items to span
}
}
});https://stackoverflow.com/questions/48527574
复制相似问题