Android RecyclerView 表格效果,header添加,遇到的问题等

最总效果:

Android RecyclerView 表格效果,header添加,遇到的问题等_第1张图片
device-2017-03-13-135723.png

代码分析, 其中遇到的问题和坑:

1: 外围的黑色边框,shape完成 ( bg.xml )



    
    
    
    

上面是4面的边框,如果想实现一个3面的边框呢?
可以使用layer-list的图片叠加功能实现,(bg_header.xml)



    

    
        
            
        
    

    
        

        

        
            
        
    

2: 列表中的下划线实现

a: 实现类DividerItemDecoration.class, 见项目代码

RecyclerView.ItemDecoration,该类为抽象类,官方目前并没有提供默认的实现类。而DividerItemDecoration.class该类很好的实现了RecyclerView添加分割线。

b: recyclerview 添加item的下划线,和方向

mRecyclerView.addItemDecoration(new DividerItemDecoration(
getActivity(), DividerItemDecoration.VERTICAL_LIST));

在该demo的表格中下划线的方向是垂直方向,不要弄错,已经犯过了!

c: AppTheme中进行下划线的颜色修改



3: 添加header

思路:adapter提供的getItemViewType()方法,来区分不同的view,加载不同的布局实现。

a: getItemViewType()中根据位置position==0来判断是header布局

@Override
    public int getItemViewType(int position) {
        if(position == 0){
            return TYPE_HEADER;
        }

        if (position == getItemCount()-1){
            //最后一个,应该加载Footer
            return TYPE_FOOTER;
        }

        return TYPE_NORMAL;
    }

b: 通过判断headerView和类型是不是正确,布局header到recyclerView中

@Override
    public NormalViewholder onCreateViewHolder(ViewGroup parent, int viewType) {

        if(mHeaderView != null && viewType == TYPE_HEADER){
            //需要传入parent,不然item不能居中
//            return new NormalViewholder(mHeaderView);
            return new NormalViewholder(LayoutInflater.from(mContext).inflate(R.layout.item_first_header, parent, false));
        }

        //需要传入parent,不然item不能居中
        View viewNormal = LayoutInflater.from(mContext).inflate(R.layout.item_recycler_grid, parent, false);
        return new NormalViewholder(viewNormal);
    }

c: 设置header

private void setAdaperHeader(){
        View view = LayoutInflater.from(mActivity).inflate(R.layout.item_first_header,null);
        mAdapter.setHeader(view);
    }

遇到的坑:

坑1:布局中的文字不能居中

解决方法:布局文件,需要进过layoutinflater加入到parent才行!!!!!

if(mHeaderView != null && viewType == TYPE_HEADER){
            //需要传入parent,不然item不能居中
//            return new NormalViewholder(mHeaderView);
            return new NormalViewholder(LayoutInflater.from(mContext).inflate(R.layout.item_first_header, parent, false));
        }

坑2:给header设置毕竟颜色时,黑色的边框给覆盖了

Android RecyclerView 表格效果,header添加,遇到的问题等_第2张图片
device-2017-03-13-135550.png

解决方法:使用layer-list实现一个背景,这个背景是将left,top,right3面的内边距减掉2dp的,这样和原来的布局重叠一下,黑色的边框就出来了!



    
        
            
        
    


好了,到这里基本弄完了,有问题的欢迎留言,谢谢!
github地址:https://github.com/George-Soros/RecyclerViewTest

你可能感兴趣的:(Android RecyclerView 表格效果,header添加,遇到的问题等)