RecyclerView 非spanCount偶数倍item的居中对齐

最近项目有个需求,大致就是:需要将列表中item居中

最终效果.jpg

接下来自然是百度:setSpanSizeLookup,这个方法决定item占据了多少列宽。

SpanCount:每行的列数,就是下图GridLayoutManager的第二个参数
spanSize:item所占的列数

如:我每行最多两列,我需要第三个item占据一行,那么我就判断当position等于2时,spanSize为SpanCount,我占据的列数等于总列数,那么这个item就占据一行了

上代码

  final GridLayoutManager layoutManager = new GridLayoutManager(this, 2);
    layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
        @Override
        public int getSpanSize(int position) {

            int spanSize = 0;
            //spanSize的长度为item所占的列数,最终的spanSize为spanCount/spanSize,结果才是真正的spanSize
            if (mUserinfo.getData().size() == 3) {
                spanSize = position == 2 ? layoutManager.getSpanCount() : 1;
                Log.d(TAG, "getSpanSize: " + spanSize);
            }
            return spanSize;
        }
    });
    layoutManager.setAutoMeasureEnabled(true);
    recyclerView.setLayoutManager(layoutManager);

    ArrayList dataBeans = new ArrayList<>();
    int userSize = mUserinfo.getData().size();
    for (int i = 0; i < userSize; i++) {
        ...
    }

    Adapter adapter = new Adapter(R.layout.adapter_match_head, dataBeans);      
    recyclerView.setAdapter(adapter);

然鹅:他仍然是这个样子的

IMG_20190122_174258.jpg

木得法子,继续百度,然后找到了 这个

这个方法需要在设置Adapter之后才会启用,否则是无效的,so,只需要将上方代码的setAdapter方法移至 layoutManager.setSpanSizeLookup上方就OJBK了,图就不贴了,第一张图就是最终的结果图,还有啥问题可以留言或者直接联系我,至于现在,我要下班了哈哈哈

你可能感兴趣的:(RecyclerView 非spanCount偶数倍item的居中对齐)