跳转至

自定义

列表间隔

有时在布局中使用layout_margin_bottom等属性更简单

组合间距

可重复调用.divider来叠加分隔线/间距

binding.rv.grid(3).divider { // 水平间距
    orientation = DividerOrientation.HORIZONTAL
    setDivider(10, true)
}.divider { // 垂直间距
    orientation = DividerOrientation.VERTICAL
    setDivider(20, true)
    onEnabled { // 是否为当前Item启用分隔线
        itemViewType == R.layout.item_divider_vertical
    }
}.setup {
    addType<DividerModel>(R.layout.item_divider_vertical)
}.models = getData()

方法

函数divider简化创建DefaultDecoration, 其实现接口ItemDecoration

函数 描述
onEnabled 根据回调返回值是否绘制分隔线
addType 添加绘制分隔线的条目类型, 原理为使用onEnabled判断
setDivider 条目间隔
setColor 分隔线颜色
setDrawable 分隔线图片, 和setDivider选一
setMargin 分隔物间距

计算边缘

Edge.computeEdge()可以计算Item是否位于列表的边缘

data class Edge(
    var left: Boolean = false,
    var top: Boolean = false,
    var right: Boolean = false,
    var bottom: Boolean = false
)

left为true表示指定position位于列表左侧, top为true表示位于列表顶部, 类推

超复杂分隔物

超复杂分隔物建议在列表布局中绘制, 可根据Edge.computeEdge()禁止绘制四周

binding.rv.linear().divider(R.drawable.divider_horizontal).setup {
    addType<DividerModel>(R.layout.item_divider_vertical)
    onBind {
        layoutManager = binding.rv.layoutManager!!
        val edge = DefaultDecoration.Edge.computeEdge(layoutPosition, layoutManager, false)
        if (edge.bottom) {
            // 列表结尾不绘制分隔物
            return@onBind
        }
    }
}.models = getData()