相关博文:git
从0实现: http://blog.csdn.net/zxt0601/article/details/52355199github
http://blog.csdn.net/zxt0601/article/details/52420706微信
使用说明 and 封装: http://gold.xitu.io/post/583c133eac502e006c23cc81app
喜欢随手点个star 多谢maven
个人github:ide
https://github.com/mcxtzhang布局
个人CSDN博客:post
http://blog.csdn.net/zxt0601gradle
个人稀土掘金:动画
http://gold.xitu.io/user/56de210b816dfa0052e66495
个人简书:
http://www.jianshu.com/users/8e91ff99b072/timeline
配合我另外一个库组装的效果(SuspensionIndexBar + SwipeMenuLayout):
(SwipeDelMenuLayout : https://github.com/mcxtzhang/SwipeDelMenuLayout)
高仿美团选择城市界面(MeituanSelectCityActivity):
高仿微信通信录界面(WeChatActivity):
普通城市列表界面(MainActivity):
Step 1. Add the JitPack repository to your build file Add it in your root build.gradle at the end of repositories:
allprojects { repositories { ... maven { url 'https://jitpack.io' } } }
Step 2. Add the dependency
dependencies { compile 'com.github.mcxtzhang:SuspensionIndexBar:V1.0.0' }
http://gold.xitu.io/post/583c133eac502e006c23cc81
2016 11 29 :
2016 11 10 : 1 IndexBar也考虑了HeaderView不须要索引的状况:
mIndexBar.setmPressedShowTextView(mTvSideBarHint)//设置HintTextView .setNeedRealIndex(true)//设置须要真实的索引 .setmLayoutManager(mManager)//设置RecyclerView的LayoutManager .setmSourceDatas(mDatas)//设置数据 .setHeaderViewCount(mWrapperAdapter.getHeaderViewCount());//设置HeaderView数量
2016 11 07 : 1 考虑了HeaderView不须要索引的状况,TitleItemDecoration增长了一个headerView的字段和方法:
new TitleItemDecoration(this, mDatas).setHeaderViewCount(mWrapperAdapter.getHeaderViewCount())
2 暂时抽离TitleItemDecoration至lib包,而且以 接口形式接收数据 。
1 扩展 SuspensionDecoration 支持传入layout or View。
网上关于实现带悬停分组头部的列表的方法有不少,像我看过有主席的自定义ExpandListView实现的,也看过有人用一个额外的父布局里面套 RecyclerView/ListView+一个头部View(位置固定在父布局上方)实现的。 对于以上解决方案,有如下几点我的以为很差的地方:
如今RecyclerView是主流
在RecyclerView外套一个父布局总归是增长布局层级,容易overdraw,显得不够优雅。
item布局实现带这种分类头部的方法有两种,一种是把分类头部当作一种itemViewtype(麻烦),另外一种是每一个Item布局都包含了分类头部的布局,代码里根据postion等信息动态Visible,Gone头部(布局冗余,item效率下降)。
何况Google为咱们提供了ItemDecoration,它自己就是用来修饰RecyclerView里的Item的,它的getItemOffsets() onDraw()
方法用于为Item分类头部留出空间和绘制(解决缺点3),它的onDrawOver()
方法用于绘制悬停的头部View(解决缺点2)。
并且更重要的是,ItemDecoration出来这么久了,你还不用它?
本文就利用ItemDecoration 打造 分组列表,并配有悬停头部功能。
亮点预览:添加多个ItemDecoration、它们的执行顺序、ItemDecoration方法执行顺序、ItemDecoration和RecyclerView的绘制顺序
(http://blog.csdn.net/zxt0601/article/details/52355199)
咱们用ItemDecoration为RecyclerView打造了带悬停头部的分组列表。其实Android版微信的通信录界面,它的分组title也不是悬停的,咱们已经领先了微信一小步(认真脸)~ 再看看市面上常见的分组列表(例如饿了么点餐商品列表),不只有悬停头部,悬停头部在切换时,还会伴有切换动画。 关于ItemDecoration还有一个问题,简单布局还好,咱们能够draw出来,若是是复杂的头部呢?可否写个xml,inflate进来,这样使用起来才简单,即另外一种简单使用onDraw和onDrawOver的姿式。 so,本文开头咱们就先用两节完善一下咱们的ItemDecoration。而后进入正题:自定义View实现右侧索引导航栏IndexBar,对数据源的排序字段按照拼音排序,最后将RecyclerView和IndexBar联动起来,触摸IndexBar上相应字母,RecyclerView滚动到相应位置。(在屏幕中间显示的其实就是一个TextView,咱们set个体IndexBar便可) 因为大部分使用右侧索引导航栏的场景,都须要这几个固定步骤,对数据源排序,set给IndexBar,和RecyclerView联动等,因此最后再将其封装一把,成一个高度封装,所以扩展性不过高的控件,更方便使用,若是须要扩展的话,反正看完本文再其基础上修改应该很简单~。
本文摘要:
(http://blog.csdn.net/zxt0601/article/details/52420706)
本文是这个系列的第三篇,不出意外也是终结篇。由于使用通过重构后的控件已经能够快速实现市面上带 索引导航、悬停分组的列表界面了。 在前两篇里,咱们从0开始,一步一步实现了仿微信通信录、饿了么选餐界面。 (第一篇戳我 第二篇戳我) 这篇文章做为终结篇,和前文相比,主要涉及如下内容: