早期ListView时

在listview的天下时,大家在listview下用分割线应该是用divider。原生的listview支持divider

android:id="@+id/activity_home_list_view"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:divider="@android:color/black"

android:dividerHeight="8dp"/>

而且divider还可以支持xml,用起来还是很方便的样子。


RecyclerView时,也用divider?

现在RecyclerView已经很频繁的被使用,可是RecyclerView不支持divider。那么该怎么办,这点小事肯定难不住大家嘛。所以就出现了如下打开方式:

1,用view做分割线。(很方便对不对,大家都用过吧,其实我也用过)

但是官方不推荐用这种方式,那应该用什么方式呢?用ItemDecoration!

ItemDecoration允许从adapter的数据集合中为特定的item视图添加特性的绘制以及布局间隔。它可以用来实现item之间的分割线,高亮,分组边界等。

我们不能简单的把ItemDecoration看成一个名字响亮的分割线。它比divider要多很多内容。一个divider只能绘制在item之间,但是ItemDecoration可以绘制在item的四边。ItemDecoration为decoration的测量和绘制提供了全方位的控制。一个decoration可以是一条分割线,也可以仅仅是一个间隔(inset)。

为什么不用view来分隔线或者做padding

1,用view做分隔线或者padding会影响性能

当在布局中添加了一个divider的时候,我们增加了view的个数。我们都知道view的数目越少会得到越好的性能。有时候增加一个view来实现divider还会增加布局的层级。比如上面的例子中,我们不仅仅增加了一个view,还增加了一个包含它们的 linear layout。为了一个divider而创建了额外的布局。

2,用view做分隔线或者padding产生副作用

因为divider是view的一部分,所以在item 动画期间,divider也会一起跟着动画。如下图:


下面才是正确的打开方式:


RecyclerView正确打开分隔符_第1张图片

其实ItemDecoration很简单

写一个自己的ItemDecoration其实非常简单。你只需要创建一个继承了ItemDecoration的类就可以了。重写 getItemOffsets() 和 onDraw() 方法。具体实现可以参考传送门示例。

而 25.0.0版本的支持库中,我们有一个新的类 “DividerItemDecoration”。这个类直接实现了divider。

DividerItemDecorationdecoration=newDividerItemDecoration(getApplicationContext(),VERTICAL);

recyclerView.addItemDecoration(decoration);

感谢Riyaz Ahamed,

更多相关文章

  1. android 网络请求方式 例子
  2. Android弹性动画三种实现方式
  3. 关于设置线性布局及其他布局的宽高
  4. Android Studio常见布局报错及解决方案
  5. Android 创建,验证和删除桌面快捷方式 (删除快捷方式测试可用)
  6. 2011.08.26——— android ListView之多个item布局
  7. 监听android home键的实现方式
  8. 初学Android,五大布局对象(六)

随机推荐

  1. Android(安卓)ueventd解析
  2. Android(安卓)Studio(十):添加assets目录
  3. android 自定义导航控件
  4. Android(安卓)Studio(九):引用jar及so文件
  5. 安卓巴士Android开发神贴整理
  6. Android(安卓)异步加载深入解析
  7. Android(安卓)下拉刷新控件SwipeRefreshL
  8. Android开发环境
  9. android视频播放器
  10. 关于手机启动的方向,和屏幕的单,双击事件