GridLayoutManager 控制Item边距RecyclerView 使用GridLayoutManager 控制每个Item间隔为4dp靠近边的也为4dp每个item之间间隔为6dp解决方案思路通过给 recyclerView 设置ItemDecoration 重写 getItemOffsets 方法根据item在 recycler View 中的layoutPositon 判断item显示在哪行哪列然后确定需要给对应item设置的边距最后调用set方法设置边距。/** * 内置到adapter 中即可 * 控制每个 item 的边距 * - 靠近边框的边距为 4dp * - 每两个 item 之间水平间隔 6dp * - 上下间隔 4dp */innerclassGridIconItemDecorator(privatevalspanCount:Int):RecyclerView.ItemDecoration(){overridefungetItemOffsets(outRect:Rect,view:View,parent:RecyclerView,state:RecyclerView.State){valpositionparent.getChildLayoutPosition(view)if(positionRecyclerView.NO_POSITION)returnvaltotalCountparent.adapter?.itemCount?:0if(totalCount0)returnvalcolumnposition%spanCountvalrowposition/spanCountvaltotalRows(totalCountspanCount-1)/spanCount// 水平间隔和垂直间隔的一半valhalfHorizontalSpacingDensityUtils.dp2px(parent.context,3f)// 6dp 的一半valhalfVerticalSpacingDensityUtils.dp2px(parent.context,2f)// 4dp 的一半valborderMarginDensityUtils.dp2px(parent.context,4f)// 边框边距// 设置左边距valleftif(column0)borderMarginelsehalfHorizontalSpacing// 设置右边距valrightif(columnspanCount-1)borderMarginelsehalfHorizontalSpacing// 设置上边距valtopif(row0)borderMarginelsehalfVerticalSpacing// 设置下边距valbottomif(rowtotalRows-1)borderMarginelsehalfVerticalSpacing outRect.set(left,top,right,bottom)}privatefundp2px(Context context,float dpVal):int{returnTypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,dpVal,context.getResources().getDisplayMetrics()).toInt();}调用valitemDecoratorGridIconItemDecorator(7)recyclerView.addItemDecoration(itemDecorator)
GridLayoutManager 控制Item边距
GridLayoutManager 控制Item边距RecyclerView 使用GridLayoutManager 控制每个Item间隔为4dp靠近边的也为4dp每个item之间间隔为6dp解决方案思路通过给 recyclerView 设置ItemDecoration 重写 getItemOffsets 方法根据item在 recycler View 中的layoutPositon 判断item显示在哪行哪列然后确定需要给对应item设置的边距最后调用set方法设置边距。/** * 内置到adapter 中即可 * 控制每个 item 的边距 * - 靠近边框的边距为 4dp * - 每两个 item 之间水平间隔 6dp * - 上下间隔 4dp */innerclassGridIconItemDecorator(privatevalspanCount:Int):RecyclerView.ItemDecoration(){overridefungetItemOffsets(outRect:Rect,view:View,parent:RecyclerView,state:RecyclerView.State){valpositionparent.getChildLayoutPosition(view)if(positionRecyclerView.NO_POSITION)returnvaltotalCountparent.adapter?.itemCount?:0if(totalCount0)returnvalcolumnposition%spanCountvalrowposition/spanCountvaltotalRows(totalCountspanCount-1)/spanCount// 水平间隔和垂直间隔的一半valhalfHorizontalSpacingDensityUtils.dp2px(parent.context,3f)// 6dp 的一半valhalfVerticalSpacingDensityUtils.dp2px(parent.context,2f)// 4dp 的一半valborderMarginDensityUtils.dp2px(parent.context,4f)// 边框边距// 设置左边距valleftif(column0)borderMarginelsehalfHorizontalSpacing// 设置右边距valrightif(columnspanCount-1)borderMarginelsehalfHorizontalSpacing// 设置上边距valtopif(row0)borderMarginelsehalfVerticalSpacing// 设置下边距valbottomif(rowtotalRows-1)borderMarginelsehalfVerticalSpacing outRect.set(left,top,right,bottom)}privatefundp2px(Context context,float dpVal):int{returnTypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,dpVal,context.getResources().getDisplayMetrics()).toInt();}调用valitemDecoratorGridIconItemDecorator(7)recyclerView.addItemDecoration(itemDecorator)