Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

BatterMan-Li/GroupIndexLib

Open more actions menu
 
 

Repository files navigation

GroupIndexLib

基础效果:

基本用法:

Step 1. 添加JitPack仓库 在当前项目等根目录下的 build.gradle 文件中添加如下内容:

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

Step 2. 添加项目依赖

dependencies {
        compile 'com.github.Othershe:GroupIndexLib:1.0.1'
}

Step 3.设置ItemDecoration

//得到tags集合,即对数据源排序后,每个数据会有一个唯一标识字段(tag),然后提取该字段值,组成一个tags集合
//这里提供一个按字母升序排列数据源的方法
//ItemData可以替换为自己的数据Bean
//排序的这部分可以完全自己实现哦,最终的目的只是得到数据源的所有唯一标识字段值集合
SortHelper<ItemData> sortHelper = new SortHelper<ItemData>() {
            @Override
            public String sortField(ItemData data) {
                //用哪个字段的值排序就返回对应字段值
                return data.getTitle();
            }
        };
        //对datas数据集排序
        sortHelper.sortByLetter(datas);
        //提取tag值
        List<String> tags = sortHelper.getTags(datas);

//设置GroupHeader
recyclerView.addItemDecoration(new GroupHeaderItemDecoration(this)
        .setTags(tags)//设置准备好的tags集合
        .setGroupHeaderHeight(30)//设置GroupHeader的高度,单位dp
        .setGroupHeaderLeftPadding(20)//设置GroupHeader左padding,单位dp
        .setGroupHeaderColor("#FFEEEEEE")//设置GroupHeader的背景色
        .setGroupHeaderTextColor("#FF999999")//设置GroupHeader的上的文字颜色
        .setGroupHeaderTextSize(12))//设置GroupHeader上的文字尺寸
        .showSuspensionGroupHeader(flase)////默认显示
        //如果需要自定义绘制GroupHeader,可重写该接口的方法,代码中有例子
        .setOnDrawItemDecorationListener(new OnDrawItemDecorationListener() {
             @Override
             public void onDrawGroupHeader(Canvas c, Paint paint, TextPaint textPaint, int[] params, int position) {

             }

             @Override
             public void onDrawSuspensionGroupHeader(Canvas c, Paint paint, TextPaint textPaint, int[] params, int position) {

             }
        })
    );

//设置分割线
recyclerView.addItemDecoration(new DivideItemDecoration().setTags(tags));

Step 4.使用SideBar

<com.othershe.groupindexlib.SideBar
        android:id="@+id/side_bar"
        android:layout_width="20dp"
        android:layout_height="match_parent"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        app:text_color="#000000"
        app:text_size="14"
        app:touch_color="#88999999"
        app:untouch_color="#00FFFFFF" />
//设置SideBar上显示的索引字符数组,默认如gif图所示
sideBar.setIndexsArray();
//设置排序后的列表数据源的要在GroupHeader上显示的tags集合、以及SideBar的触摸反馈接口
sideBar.setOnSideBarTouchListener(tags, new OnSideBarTouchListener() {
            @Override
            public void onTouch(String text, int position) {
                //手指触摸
                //text 代表当前手指触摸的字符
                //position 代表RecyclerView将要滚动到的位置,-1代表没找到对应position,则不用滚动列表
                //滚动则使用layoutManager.scrollToPositionWithOffset(position, 0)方法
            }

            @Override
            public void onTouchEnd() {
                //手指触摸结束
            }
        });

SideBar相关自定义属性:

属性名 含义
text_color 设置索引字符颜色
text_size 设置索引字符尺寸(sp)
touch_color 设置SideBar被触摸时的背景颜色
untouch_color 设置SideBar默认背景颜色

About

ItemDecoration实现的仿通信录分组索引效果,同时提供SideBar

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Java 100.0%
Morty Proxy This is a proxified and sanitized view of the page, visit original site.