Home

Awesome

VariedItemDecoration是通用的Recycler ItemDecoration。可实现在一个列表里显示多种不同样式的ItemDecoration;可定制每个item的ItemDecoration的显示和样式。使用方便,并且提供非常简单的自定义ItemDecoration方式,根据position返回对应item的装饰drawable和大小。

引入依赖

在Project的build.gradle在添加以下代码

allprojects {
      repositories {
         ...
         maven { url 'https://jitpack.io' }
      }
   }

在Module的build.gradle在添加以下代码

// 使用了Androidx
implementation 'com.github.donkingliang:VariedItemDecoration:1.0.0'

// 或者

// 使用Android support包
implementation 'com.github.donkingliang:VariedItemDecoration:1.0.0-support'

使用示例

简单使用:框架提供了LinearItemDecoration和GridItemDecoration两个ItemDecoration类。对应给使用LinearLayoutManager和GridLayoutManager的RecyclerView添加装饰。

// 给recyclerView添加ItemDecoration,size是间隔大小,drawable是装饰,可以为空。
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerView.addItemDecoration(new LinearItemDecoration(size, drawable));

// 给recyclerView添加ItemDecoration,GridItemDecoration支持设置垂直间隔和水平间隔的装饰,drawable可以为null。
recyclerView.setLayoutManager(new GridLayoutManager(this, 3));
recyclerView.addItemDecoration(new GridItemDecoration(rowDividerSize,rowDivider,columnDividerSize, columnDivider));


// 显示最后item的Divider,默认false
decoration.setShowLastDivider(true);

自定义ItemDecoration:框架提供了LinearVariedItemDecoration和GridVariedItemDecoration两个ItemDecoration基类。使用这两个类可以自定义出各种样式的间隔装饰。他们的使用也非常的简单,只有根据position返回对应item需要的装饰size和装饰Drawable对象即可。


public class MyLinearItemDecoration extends LinearVariedItemDecoration {
    
    @Override
    public int getDividerSize(int position) {
        // 返回间隔的大小
        return 20;
    }

    @Override
    public Drawable getDivider(int position) {
        // 根据position返回Drawable  可以为null
        return drawable;
    }
}

public class MyGridItemDecoration extends GridVariedItemDecoration {

    @Override
    public int getRowDividerSize(int position) {
        // 返回间隔的大小
        return 20;
    }

    @Override
    public Drawable getRowDivider(int position) {
        // 根据position返回Drawable  可以为null
        return rowDrawable;
    }

    @Override
    public int getColumnDividerSize(int position) {
        // 返回间隔的大小
        return 20;
    }

    @Override
    public Drawable getColumnDivider(int position) {
        // 根据position返回Drawable 可以为null
        return columnDrawable;
    }
}

注意: Drawable对象不要在getxxxDivider方法中实例化。这个方法只返回对象,不创建对象,因为它会频繁调用。

在GridVariedItemDecoration类中有两个方法:isRightItem和isBottomItem,在自定义ItemDecoration时,使用这两个方法可以判断item是否是最右边或者最下边的item。