我在android中使用Recyclerview和Grid布局管理器实现Dashboard,连续3个项目。我将从服务器获取仪表板项目。根据项目的数量,我需要将Recyclerview项目调整为中心。 例如,如果我有11个项目,我需要将最后2个项目与中心对齐。 如果我有,10个项目,最后一个项目需要对齐中心。对于这个逻辑我做了很多研究,但没有找到任何解决方案。即使我尝试使用GridLayoutManager的spansize概念但没有运气。 任何帮助/示例代码都会非常感激。 提前致谢
答案 0 :(得分:2)
如果我正确理解您的要求,则无法通过RecyclerView
+ GridLayoutManager
完成您想要的操作。即使您实施了自定义GridLayoutManager.SpanSizeLookup
,您也只能使用额外的一两件商品拉伸来填充该行...您不能中心他们是。
然而,您可以使用RecyclerView
FlexboxLayoutManager
来完成您想要的工作,这是Google的 FlexboxLayout 项目的一部分:https://github.com/google/flexbox-layout
创建FlexboxLayoutManager
时,您需要将FlexDirection
设置为“行”,将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);
}
这是一个指向小型应用的要点的链接,用于演示:https://gist.github.com/zizibaloob/0c44bfe59b371b5ae0bd2edcb4a7e592
答案 1 :(得分:0)
在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
}
}
});