博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RecyclerView列表调用addItemDecoration实现添加自定义分割线
阅读量:7207 次
发布时间:2019-06-29

本文共 2625 字,大约阅读时间需要 8 分钟。

hot3.png

如果还不会使用RecyclerView,请看我的另一篇博客

RecyclerView不像ListView那样自带分割线,需要自定义分割线

先在drawable中创建一个line_divider.xml文件用户设置分割线的颜色

自定义RecyclerView.ItemDecoration类的子类SimpleDividerItemDecoration类,代码如下:

public class SimpleDividerItemDecoration extends RecyclerView.ItemDecoration {    private Drawable mDivider;     //分割线Drawable    private int mDividerHeight;  //分割线高度    private int inset;       //分割线缩进值    /**     * 使用line_divider中定义好的颜色     *     * @param context     * @param dividerHeight 分割线高度     */    public SimpleDividerItemDecoration(Context context, int dividerHeight) {        mDivider = ContextCompat.getDrawable(context, R.drawable.line_divider);        mDividerHeight = dividerHeight;    }    public SimpleDividerItemDecoration(Context context, int inset, int dividerHeight) {        this.inset = inset;        mDivider = ContextCompat.getDrawable(context, R.drawable.line_divider);        mDividerHeight = dividerHeight;    }    /**     * @param context     * @param divider       分割线Drawable     * @param dividerHeight 分割线高度     */    public SimpleDividerItemDecoration(Context context, Drawable divider, int dividerHeight) {        if (divider == null) {            mDivider = ContextCompat.getDrawable(context, R.drawable.line_divider);        } else {            mDivider = divider;        }        mDividerHeight = dividerHeight;    }    //获取分割线尺寸    @Override    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {        super.getItemOffsets(outRect, view, parent, state);        outRect.set(0, 0, 0, mDividerHeight);    }    @Override    public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {        int left = parent.getPaddingLeft();        int right = parent.getWidth() - parent.getPaddingRight();        int childCount = parent.getChildCount();        //最后一个item不画分割线        for (int i = 0; i < childCount - 1; i++) {            View child = parent.getChildAt(i);            RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();            int top = child.getBottom() + params.bottomMargin;//            int bottom = top + mDividerHeight;            int bottom = top + mDivider.getIntrinsicHeight();            if (inset > 0) {                mDivider.setBounds(left + inset, top, right - inset, bottom);            } else {                mDivider.setBounds(left, top, right, bottom);            }            mDivider.draw(c);        }    }}

使用:

recyclerView.addItemDecoration(new SimpleDividerItemDecoration(this,20, 5));

 

转载于:https://my.oschina.net/lanyu96/blog/2874301

你可能感兴趣的文章
MongoDB入门简单介绍
查看>>
Git show-branch显示提交信息
查看>>
秒杀 ILSpy 等反编译利器 DotNet Resolver
查看>>
SharePoint 2013 中代码创建列表查阅项字段
查看>>
2014仲秋校招之面试篇
查看>>
负载均衡研究 基础
查看>>
10.cadence.自定义焊盘的创建[原创]
查看>>
shell编程总结
查看>>
Docker源码分析(七):Docker Container网络 (上)
查看>>
一些旁门左道
查看>>
Common Pitfalls In Machine Learning Projects
查看>>
Android内存泄漏分析及调试
查看>>
todoing
查看>>
[Cocos2d-x]Cocos2d-x 3.2 学习笔记
查看>>
进程调度
查看>>
使用代码为TextView设置drawableLeft
查看>>
Android开发(十八)——头部、中部、底部布局技巧
查看>>
Egret 集成第三方库 记录
查看>>
同源策略——浏览器安全卫士
查看>>
c/c++ 基金会(七) 功能覆盖,虚函数,纯虚函数控制
查看>>