跳转至

线性列表

如果直接绘制item的xml可以实现分割线, 比如你在xml中使用简单的layout_margin(设置间距)也能完成你想要的分割线效果, 那么我更建议使用layout_margin

水平分割线

创建一个drawable文件来描述分隔线, 其具备复用的特点

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="@color/dividerDecoration" />
    <size android:height="5dp" />
</shape>

创建列表

rv.linear().divider(R.drawable.divider_horizontal).setup {
    addType<DividerModel>(R.layout.item_divider)
}.models = getData()


垂直分割线

创建Drawable作为分隔线

<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="@color/dividerDecoration" />
    <size android:width="5dp" />
</shape>

创建列表

rv.linear(RecyclerView.HORIZONTAL).divider(R.drawable.divider_vertical).setup {
    addType<DividerModel>(R.layout.item_divider_vertical)
}.models = getData()

  • 这里使用Drawable资源来快速设置分割线, Drawable的宽高就是分割线的宽高
  • 如果水平分割线, 则Drawable的宽度值无效(实际宽度值为RecyclerView的宽)
  • 如果垂直分割线, 则Drawable的高度值无效(实际分割线高度为RecyclerView高度)

边缘分割线

字段 描述
startVisible 是否显示首部分割线
endVisible 是否显示尾部分割线
includeVisible 是否显示首尾分割线

通过两个字段可以控制首尾是否显示分割线

rv.linear().divider {
    setDrawable(R.drawable.divider_horizontal)
    startVisible = true
    endVisible = true
}.setup {
    addType<DividerModel>(R.layout.item_divider_horizontal)
}.models = getData()

四周全包裹

这种分割线属于网格分割线, 要求使用DividerOrientation.GRID, 但LinearLayoutManager并不支持

这里有两种解决办法

  1. 使用spanCount为1的GridLayoutManager等效
  2. 在rv两侧单独使用View绘制两条分割线

推荐第一种办法, 示例代码如下:

rv.grid().divider{
    setDrawable(R.drawable.divider_horizontal)
    orientation = DividerOrientation.GRID
    includeVisible = true
}.setup {
    addType<DividerModel>(R.layout.item_divider_vertical)
}.models = getData()