Skip to content

Latest commit

 

History

History
216 lines (146 loc) · 11.5 KB

recycler_divider.md

File metadata and controls

216 lines (146 loc) · 11.5 KB

给 RecyclerView 配置 divider

RecyclerView 默认没有提供 divider 支持,但其提供的 ItemDecoration 可以实现 divider

AssemblyAdapter 的 assemblyadapter-common-recycler-divider 模块提供了一整套强大的 divider 支持,如下:

支持特性有:

  • 支持横向、竖向
  • 支持 RTL
  • 支持 side divider:如果当前是竖向滑动,那么横向上的 divider 就是 side divider,横向滑动时反之
  • divider 支持按 position 或 spanIndex 个性化或禁用

示例

val linearDividerItemDecoration = LinearDividerItemDecoration.Builder(context).apply {
    // divider 为红色 5 个像素
    divider(Divider.color(Color.RED, 5)) {
        // 但是 position 为 10 的 item 的 divider 为 蓝色 5 个像素
        personaliseByPosition(10, Divider.color(Color.BLUE, 5))
        // 同时 position 为 5 的 item 没有 divider
        disableByPosition(5)
    }

    // 头部和尾巴 divider 为空白 20 个像素(默认不显示头部和尾巴 divider)
    headerAndFooterDivider(Divider.space(20))

    // side 头部和尾巴 divider 为绿色 5 个像素
    sideHeaderAndFooterDivider(Divider.color(Color.GREEN, 5))
}.build()
recyclerView.addItemDecoration(linearDividerItemDecoration)

支持设置六种 divider,分别如下(以垂直滑动方向为例,横向滑动时换位即可):

  • divider:显示在滑动方向上每个 item(最后一个 item 除外)的 bottom 边
  • headerDivider:显示在滑动方向上第一个 item 的 top 边
  • footerDivider:显示在滑动方向上最后一个 item 的 bottom 边
  • sideDivider:显示在非滑动方向上每个 item(最后一个 item 除外)的 right 边。LinearDividerItemDecoration 不支持
  • sideHeaderDivider:显示在非滑动方向上第一个 item 的 left 边
  • sideFooterDivider:显示在非滑动方向上最后一个 item 的 right 边

Divider

Divider 提供了 color、drawable、space 三个系列的方法来方便使用者配置 divider,并且每个系列都提供了不同方法来精确的指定 divider 的尺寸,详细使用请参考 Divider 源码

ItemFactory 支持

assemblyadapter-recycler 模块还提供了支持通过 ItemFactory 个性化或禁用 divider 的 ItemDecoration,如下:

示例

// ListSeparatorItemFactory 是一个列表分割符 ItemFactory 具体实现就不写了
val linearDividerItemDecoration = AssemblyLinearDividerItemDecoration.Builder(context).apply {
    // divider 为红色 5 个像素
    divider(Divider.color(Color.RED, 5)) {
        personaliseByItemFactoryClass(
            ListSeparatorItemFactory::class,
            Divider.color(Color.BLUE, 5)
        )
    }
}.build()
recyclerView.addItemDecoration(linearDividerItemDecoration)

扩展支持

assemblyadapter-common-recycler-divider 模块还提供了一套扩展支持位于 DividerExtensions.kt,如下:

  • RecyclerView.newLinearDividerItemDecoration(): LinearDividerItemDecoration
  • RecyclerView.newGridDividerItemDecoration(): GridDividerItemDecoration
  • RecyclerView.newStaggeredGridDividerItemDecoration(): StaggeredGridDividerItemDecoration
  • RecyclerView.addLinearDividerItemDecoration()
  • RecyclerView.addGridDividerItemDecoration()
  • RecyclerView.addStaggeredGridDividerItemDecoration()

assemblyadapter-recycler 模块也提供了一套扩展支持位于 AssemblyDividerExtensions.kt,如下:

  • RecyclerView.newAssemblyLinearDividerItemDecoration(): AssemblyLinearDividerItemDecoration
  • RecyclerView.newAssemblyGridDividerItemDecoration(): AssemblyGridDividerItemDecoration
  • RecyclerView.newAssemblyStaggeredGridDividerItemDecoration(): AssemblyStaggeredGridDividerItemDecoration
  • RecyclerView.addAssemblyLinearDividerItemDecoration()
  • RecyclerView.addAssemblyGridDividerItemDecoration()
  • RecyclerView.addAssemblyStaggeredGridDividerItemDecoration()

DividerRecyclerView

assemblyadapter-common-recycler-divider 提供了 DividerRecyclerView 可以在布局中配置 divider,支持的属性及示例请参考以下布局:

更多示例