2016-11-23遇到的一点小问题
RecyclerView使用GridLayoutManager添加分隔线
今天为RecyclerView添加分隔线,用的GridLayoutManager,因为考虑列开头、结尾和中间距离要不一样,不同列得区别对待,所以没法像LinearLayoutManager那样直接设置layout_margin或弄个View,因为要在RecyclerView.Adapter<RecyclerView.ViewHolder>的onBindViewHolder中写一堆判断,所以用的网上找的自定义RecyclerView.ItemDecoration来实现,这个网上一找一堆
http://www.jianshu.com/p/4eff036360da
http://www.cnblogs.com/huolongluo/p/5879292.html
http://blog.csdn.net/lmj623565791/article/details/45059587
主要就是在getItemOffsets(Rect outRect, View view, RecyclerView parent, State state)
设置绘制位置,设置时区分是否最后行和最后列,是的话位置为默认的0,
在滑动显示时根据onDraw(Canvas c, RecyclerView parent, State state)
设置绘制的分隔线样式。
分隔线样式可以通过修改Activity主题的<item name="android:listDivider">@drawable/aaa</item>
来修改,也可以通过drawable对象来修改,还可以只通过颜色和尺寸来修改。
不过这样子还是有问题,因为这个和设置margin类似,前面正常绘制,最后一列不绘制,所以最后还是会比前面的宽一点点。所以感觉还是尽量设置margin省事。
使用ContextCompat.getDrawable获取Drawable
之前获取Drawable都是
Drawable drawable = getResources().getDrawable(R.drawable.a);
不过这方法过时了,而新方法
Drawable drawable = getDrawable(R.drawable.a);
这个点开其实就是
Drawable drawable = getResources().getDrawable(R.drawable.a,getTheme());
不过两个都是得API21才能用,每次都是
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
}else{
}
然后在看分隔线时看到别人是这样的
Drawable drawable = ContextCompat.getDrawable(context,R.drawable.a);
是在V4包里面的android.support.v4.content
,很好,不用管版本了,以后就用这个。
网友评论