Android RecyclerView item 间距 及是否包含四周边距 的设置

从别的文章看到的 但是不满足需求 或者我写错了 就我改了过来

    public class SpacesItemDecoration extends RecyclerView.ItemDecoration {

        private HashMap<String, Integer> spaceValue; //间隔
        private boolean includeEdge; //是否包含四周边距
        private int spanCount; //列数


        public static final String TOP_SPACE = "top_space";
        public static final String BOTTOM_SPACE = "bottom_space";
        public static final String LEFT_SPACE = "left_space";
        public static final String RIGHT_SPACE = "right_space";

        public SpacesItemDecoration(int spanCount, HashMap<String, Integer> spaceValue, boolean includeEdge) {
            this.spanCount = spanCount;
            this.spaceValue = spaceValue;
            this.includeEdge = includeEdge;
        }

        @Override
        public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {

            //这里是关键,需要根据你有几列来判断
            int position = parent.getChildAdapterPosition(view); // item position
            int column = position % spanCount; // item column


            if (includeEdge) {
                outRect.left = spaceValue.get(LEFT_SPACE) - column * spaceValue.get(LEFT_SPACE) / spanCount;
                outRect.right = (column + 1) * spaceValue.get(RIGHT_SPACE) / spanCount;
                if (position < spanCount) { // top edge 判断是首行
                    outRect.top = spaceValue.get(TOP_SPACE);
                }
                outRect.bottom = spaceValue.get(BOTTOM_SPACE); // item bottom
            } else {
                //outRect.left = column * spaceValue.get(LEFT_SPACE) / spanCount;
                if((column+1)/spanCount==0){
                    outRect.right=spaceValue.get(RIGHT_SPACE);
                }else {
                    outRect.right=0;
                }
                //outRect.right = spaceValue.get(RIGHT_SPACE) - (column + 1) * spaceValue.get(RIGHT_SPACE) / spanCount;
/*                if (position >= spanCount) {//不是首行
                    outRect.top = spaceValue.get(TOP_SPACE); // item top
                }*/
                outRect.bottom = spaceValue.get(BOTTOM_SPACE); // item bottom
                //只有首行设置上边距
                //if (position >= spanCount) {//不是首行
                //   outRect.top = spaceValue.get(TOP_SPACE); // item top
                //}else {
                //   outRect.top = 20; //首行
                //}

                //只有下边距
//                if (position > (parent.getAdapter().getItemCount() - spanCount)-1) {
//                    outRect.bottom = 100;
//                }
            }
        }
    }

 

 

我是不要外部边距,只要右下间距

HashMap<String, Integer> spacesVelue = new HashMap<>();
spacesVelue.put(SpacesItemDecoration.TOP_SPACE,0);
spacesVelue.put(SpacesItemDecoration.BOTTOM_SPACE,4);
spacesVelue.put(SpacesItemDecoration.LEFT_SPACE, 0);
spacesVelue.put(SpacesItemDecoration.RIGHT_SPACE,2);
recyclerView.addItemDecoration(new SpacesItemDecoration(3,spacesVelue, false));
Android 开发中,可以通过设置 RecyclerView间距来调整其显示效果。下面是一些实现方法: 1. 在 RecyclerViewitem 布局文件中添加 margin 属性。例如,在 LinearLayout 布局中,可以通过设置 android:layout_marginTop、android:layout_marginBottom、android:layout_marginLeft、android:layout_marginRight 属性来设置上下左右的间距。 2. 通过 RecyclerView.ItemDecoration 实现间距设置。自定义一个 RecyclerView.ItemDecoration 类,重写 onDraw() 和 getItemOffsets() 方法,在 getItemOffsets() 方法中设置 item 之间的间距。 ```java public class MyItemDecoration extends RecyclerView.ItemDecoration { private int space; public MyItemDecoration(int space) { this.space = space; } @Override public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { outRect.left = space; outRect.right = space; outRect.bottom = space; if (parent.getChildLayoutPosition(view) == 0) { outRect.top = space; } else { outRect.top = 0; } } } ``` 在 RecyclerView 的代码中调用 setItemDecoration() 方法,将自定义的 MyItemDecoration 类传入即可。 ```java recyclerView.addItemDecoration(new MyItemDecoration(10)); ``` 3. 使用 RecyclerView 的 LayoutManager 来实现间距设置。例如,使用 LinearLayoutManager 的 setPadding() 和 setClipToPadding() 方法来设置间距。 ```java LinearLayoutManager layoutManager = new LinearLayoutManager(this); recyclerView.setLayoutManager(layoutManager); recyclerView.setPadding(10, 10, 10, 10); recyclerView.setClipToPadding(false); ``` 以上是三种常用的设置 RecyclerView 间距的方法,可以根据具体需求选择适合自己的方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值