Android Recyclerview的item间距实现

这篇具有很好参考价值的文章主要介绍了Android Recyclerview的item间距实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

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

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

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

Linearlayout垂直排列每个item间隔

效果

Android Recyclerview的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的宽度需要平分该行剩余空间大小(除去间距)

效果

Android Recyclerview的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文章来源地址https://www.toymoban.com/news/detail-746590.html

到了这里,关于Android Recyclerview的item间距实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android NestedScrollView包裹RecyclerView高度撑满所有item,kotlin

    Android NestedScrollView包裹RecyclerView高度撑满所有item,kotlin 当用NestedScrollView包裹RecyclerView后,   然而设置: 会使得RecyclerView加载完成所有itemCount的数理,撑满整个RecyclerView高度,这深深改变了RecyclerView只加载显示当前屏幕可见区域的特性,此时RecyclerView一次性加载全部item。

    2024年02月16日
    浏览(48)
  • Android中实现RecyclerView,并对item及其多个子控件的点击事件监听

    目录 背景 实现RecyclerView 第一步、 新建item的xml 第二步、在activity的布局中引入 RecyclerView 第三步、新建一个adapter   第四步、在activity中初始化绑定adapter即可 实现item及其多个子组件点击事件监听 第一步、 适配器中创建监听对象 第二步、适配器中绑定监听item和子组件 第三

    2024年02月19日
    浏览(55)
  • 解决Android中使用RecyclerView滑动时底部item显示不全的问题

    感觉这个bug是不是因人而异啊,找了很多文章都没能解决我的问题,包括在RecyclerView上在嵌套上一层RelativeLayout,添加属性android:descendantFocusability=”blocksDescendants”,使用ConstraintLayout布局包裹RecyclerView,再设置layout_height=\\\"0dp\\\"和layout_constraintBottom_toBottomOf=\\\"parent\\\"(就是指定约束

    2024年02月16日
    浏览(42)
  • Android Glide in RecyclerView,only load visible item when page return,Kotlin

    base on this article: Android Glide preload RecyclerView切入后台不可见再切换可见只加载当前视野可见区域item图片,Kotlin_zhangphil的博客-CSDN博客 【代码】Android Paging 3,kotlin(1)在实际的开发中,虽然Glide解决了快速加载图片的问题,但还有一个问题悬而未决:比如用户的头像,往往用

    2024年02月09日
    浏览(45)
  • Android Glide preload RecyclerView切入后台不可见再切换可见只加载当前视野可见区域item图片,Kotlin

    build.gradle文件: 如果手机图片很多,假设已经将全部图片装入宫格的列表,在快速上下滑动过程中,由于glide会累积每一个图片的加载任务,如果图片比较大,上下滑动时间又很长,那么累积任务会很严重,导致异常发生,实现在RecyclerView切入后台(或不可见)时候,然后再

    2024年02月10日
    浏览(49)
  • RecyclerView使用GridLayoutManager 设置间距一致大小

    在android应用中,要实现一个Recycleview,使用GridLayoutManager格子排列,且排列成4列 实现水平方向间距均等(没有外边距)。 (均分为3列5列等、竖直方向、有边距等原理相同。) 先看最终效果图。 --- xml中这样配置 为了醒目,我们让RecyclerView背景是浅绿色。 每一个item的配置如

    2023年04月22日
    浏览(46)
  • Android RecyclerView 实现瀑布流

    Android RecyclerView 使用大全 - 基础使用,item 动画,下拉刷新等 瀑布流也是个常用的显示控件了,但是在使用时经常遇到一些问题,比如滑动回顶部后出现空隙、item在滑动时乱跳等问题。 下面就来说说我怎么实现的瀑布流,并且怎么处理上面所说的这些问题的。 我使用了原生

    2024年02月09日
    浏览(72)
  • Android PopupWindow+RecyclerView 实现二级联动筛选

    这篇文章主要的功能是利用 PopupWindow 和  RecyclerView 实现条件筛选包括二级联动筛选,主要是仿小红书里的筛选功能而写的一个 Demo 效果如下,代码通俗易懂,保姆级教程 这里我模拟实际接口返回的数据而准备的数据源,在工程目录下新建 assets 资源文件,在新建一个JsonDat

    2024年02月13日
    浏览(77)
  • Android 无限循环RecyclerView的完美实现方案

    方案1 对Adapter进行修改 网上大部分博客的解决方案都是这种方案,对Adapter做修改。具体如下 首先,让 Adapter 的 getItemCount() 方法返回 Integer.MAX_VALUE,使得position数据达到很大很大; 其次,在 onBindViewHolder() 方法里对position参数取余运算,拿到position对应的真实数据索引,然后对

    2024年01月23日
    浏览(49)
  • Android 实现 RecyclerView下拉刷新,SwipeRefreshLayout上拉加载

    上拉、下拉的效果图如下: 使用步骤 1、在清单文件中添加依赖 implementation ‘com.android.support:recyclerview-v7:27.1.1’ implementation “androidx.swiperefreshlayout:swiperefreshlayout:1.0.0” 2、main布局 item.xml footview.xml(底部提示) 2、MyAdapter 3、MainActivity实现

    2024年02月13日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包