首页 > 其他分享 >Android Recyclerview的item间距实现

Android Recyclerview的item间距实现

时间:2023-11-20 22:58:24浏览次数:35  
标签:outRect val space spanCount item position Android Recyclerview

Recyclerview中,提供了一个方法addItemDecoration给我们用于设置item的分割线

下面提供几个常见的分割线效果

注: 下面的SizeUtilsAndroidUtilCode此库里的工具类,需要添加依赖,也可以自行修改封装的方法(主要是将dp单位转为px)

以下代码已封装在我的库中stars-one/XAndroidUtil: 封装自己常用的一些Android的组件或工具,可以直接依赖使用

注意库中的类名与本文例子有所变化,自行参考库的文档说明

Linearlayout垂直排列每个item间隔

效果

代码

/**
 * 
 * @param space 间距(单位px)
 */
class VerticalItemDecoration(val space: Int = SizeUtils.dp2px(12f)) :
    RecyclerView.ItemDecoration() {

    override fun getItemOffsets(
        outRect: Rect,
        view: View,
        parent: RecyclerView,
        state: RecyclerView.State
    ) {
        val position = parent.getChildAdapterPosition(view)

        val allCount = parent.adapter?.itemCount ?: 0

        //最后一个不加边距
        if (position == allCount - 1) {
            return
        }

        outRect.bottom = space
    }
}

上面代码实际就是在每个item后面添加一个间隔(最后一个则不加间隔)

PS: 实际上,这种简单的可以直接在item的布局添加一个margin也可以实现

GridLayoutManager(类似九宫格布局)

UI的要求九宫格布局,需要中间有间隔,然后每行的几个item的宽度需要平分该行剩余空间大小(除去间距)

效果

代码

/**
 * 
 * @param spanCount 每行的item数目
 * @param space 间隔(单位px)
 */
class GridItemDecoration(val spanCount: Int = 3, val space: Int = SizeUtils.dp2px(8f)) :
    RecyclerView.ItemDecoration() {

    override fun getItemOffsets(
        outRect: Rect,
        view: View,
        parent: RecyclerView,
        state: RecyclerView.State
    ) {
        val position = parent.getChildAdapterPosition(view)
        val column = position % spanCount

        outRect.left = column * space / spanCount;
        outRect.right = space - (column + 1) * space / spanCount
        
        //item的上边距,这里各位根据需求自己修改,也可以设置下边距
        if (position >= spanCount) {
            outRect.top = space
        }
    }
}

为了方便在外层直接设置上下边距,对上面的代码新增一个参数

/**
 *
 * @param spanCount 每行的item数目
 * @param space 间隔(单位px)
 */
class GridItemDecoration(
    val spanCount: Int = 3,
    val space: Int = SizeUtils.dp2px(8f),
    val action: ((outRect: Rect, space: Int, position: Int) -> Unit)? = null
) :
    RecyclerView.ItemDecoration() {

    override fun getItemOffsets(
        outRect: Rect,
        view: View,
        parent: RecyclerView,
        state: RecyclerView.State
    ) {
        val position = parent.getChildAdapterPosition(view)
        val column = position % spanCount

        outRect.left = column * space / spanCount;
        outRect.right = space - (column + 1) * space / spanCount

        //上边距,这里各位根据需求自己修改
        if (position >= spanCount) {
            outRect.top = space
            action?.invoke(outRect, space, position)
        }
    }
}

//使用
val itemDero = GridItemDecoration {outRect, space, position ->  }
mrecyclerview.addItemDecoration(itemDero)

补充

网格布局根据orientation从而展示item的顺序不同

GridLayoutManager(context, 2).apply {
	orientation = RecyclerView.VERTICAL
}

如果是Vertical,则是一行行排列,一行满足了spanCount则自动换行,如下面效果:
1 2
3 4

如果是HORIZONTAL,则是与一列列排列,每列满足了spanCount则自动换行,如下面效果
1 3
2 4

标签:outRect,val,space,spanCount,item,position,Android,Recyclerview
From: https://www.cnblogs.com/stars-one/p/17845096.html

相关文章

  • Android系统开发 Android10版本自定义系统版本号
    前言  framework开发,此博客基于Android10版本,实现自定义系统版本号。找到修改位置需要修改的关键文件是buildinfo.sh搜索一下文件找到要改的目标文件这里建议将这个文件拷贝出来修改,各自的编译环境不同,拷贝或者传输文件的方式不同,这里各自发挥。下面是我在wsl里把文件拷......
  • Android Studio 下发布项目成APK文件
    AndroidStudio下发布项目成APK文件一、环境和版本Windows10专业版AndroidStudioGiraffe|2022.3.1Patch2这个太重要IDE该版后菜单位置会发生变化二、操作过程操作过程非常简单找到菜单Buid点击弹出后,再找到BuildBundle(s)/APK(s)鼠标滑动后选中BuildAPK(s)点击即可。新......
  • android更改模拟器下载地址以及模拟器基本命令
    一、修改模拟器下载地址模拟器存放默认路径:C:\Users\Administrator\.android\avd修改模拟器存放路径:点击androidstudio中的help--- EditCustomProperties 在弹出的文本框里输入你要存放的路径,保存即可ANDROID_AVD_HOME=D:\\二、模拟器常用命令查看模拟器列表......
  • Android TextView自动缩放能够完整显示出一行
    原文地址:AndroidTextView自动缩放能够完整显示出一行-Stars-One的杂货小窝app开发中,需要TextView可以在不同的屏幕大小要完整显示出文字,而不是显示省略号可以使用以下代码,让TextView字体实现自适应(不过具体算法已经实现了,我们只需要设置下即可实现效果)//设置最大行......
  • 从0写Android:一 安装&运行
    基本信息1.操作系统:windows2.功能:模拟操作其它手机软件3.本次完成:安装到运行第一个模板工程安装&启动1.下载地址:https://developer.android.google.cn/studio?hl=zh-cn下载下来直接无脑安装即可2.打开软件如果出现add-onlist报错,直接点击cancel即可,不要配置如果不......
  • 运用Kotlin开发Android应用的一些技巧
    今天的这篇文章带你学习使用Kotlin开发Android应用,并对比我们传统语言Java,让你真真切切的感受到他的美和优雅。配置项目gradle文件applyplugin:'com.android.application'applyplugin:'kotlin-android'applyplugin:'kotlin-android-extensions'dependencies{clas......
  • 安卓大佬力荐,送你一份超详细的Android学习教程指南
    前言之前,我们也经常听到一种声音“计算机专业已经饱和了,赚不到钱了”,但是现在,这种声音好像越来越少了,大家都没有这种担心了吗?主要是初级岗位已经趋于饱和,但高级岗位又相对缺乏,作为Android开发人员,我们应该思考怎么去往高级人才发展,而不是转学其他语言,我们是要懂得去成为金字塔顶端......
  • 冲刺秋招,备战24年春招,GitHub爆火的Android面试指南来袭!
    前言你有面试机会了吗?随着金九银十到来,肯定有很多小伙伴想抓住一年两次的机会,开始疯狂投简历了吧~但是事实是投出去的简历基本上HR都是已读不回收到面试邀请,被告知不用面试了参加了面试,就像走了个过场,成了HR的业绩指标面试通过,但是被放鸽子了...为什么?相信会有人想这样问,......
  • Android RecyclerView八个必会的面试技巧
    引言在Android开发领域,RecyclerView是一项强大的工具,用于处理大量数据的高效显示。熟练掌握RecyclerView的知识对于一名Android开发者来说至关重要。本文将深入研究一些常见的RecyclerView面试问题,并提供更详细的参考答案,以帮助你更好地准备面试。RecyclerView的优势和用途问题:请......
  • android studio 编译出指定 app 名称
    找到App工程目录中的"build.gradle"配置文件。在"build.gradle"中添加如下的代码。 //指定文件名的apk  //**************************************************************************  android.applicationVariants.all{    variant->variant.outputs.......