Android GridLayoutManager跨度大小

时间:2018-01-30 17:50:28

标签: android android-recyclerview

我在android中使用Recyclerview和Grid布局管理器实现Dashboard,连续3个项目。我将从服务器获取仪表板项目。根据项目的数量,我需要将Recyclerview项目调整为中心。 例如,如果我有11个项目,我需要将最后2个项目与中心对齐。 如果我有,10个项目,最后一个项目需要对齐中心。对于这个逻辑我做了很多研究,但没有找到任何解决方案。即使我尝试使用GridLayoutManager的spansize概念但没有运气。 任何帮助/示例代码都会非常感激。 提前致谢

2 个答案:

答案 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
            }
        }
    });