GridLayoutManager设置间距的相关问题

GridLayoutManager设置一个3列列表的间距,左右贴边,中间居中。
由于RecyclerView会将宽自动填充满,因此每个item的右边都会留有空白部分,又由于是3列,所以

位移间距 = (屏幕宽度 - 每个item的宽度 * 3)/ 6
int screenWidth = ScreenUtils.getScreenWidth(mContext); //屏幕宽度
int itemWidth = SizeUtils.dp2px(mContext, 90); //每个item的宽度
mRecyclerView.addItemDecoration(new SpaceItemDecoration((screenWidth - itemWidth* 3)/6));
public class SpaceItemDecoration extends RecyclerView.ItemDecoration {
        private int space;  //位移间距
        public SpaceItemDecoration(int space) {
            this.space = space;
        }

        @Override
        public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
            if (parent.getChildAdapterPosition(view) %3 == 0) {
                outRect.left = 0; //第一列左边贴边
            } else {
                if (parent.getChildAdapterPosition(view) %3 == 1) {
                    outRect.left = space;//第二列移动一个位移间距
                } else {
                    outRect.left = space * 2;//由于第二列已经移动了一个间距,所以第三列要移动两个位移间距就能右边贴边,且item间距相等
                }
            }

            if (parent.getChildAdapterPosition(view) >= 3) {
                outRect.top = SizeUtils.dp2px(mContext, 10);
            } else {
                outRect.top = 0;
            }
        }

    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容