最总效果:

6525c0600427

device-2017-03-13-135723.png

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

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

上面是4面的边框,如果想实现一个3面的边框呢?

可以使用layer-list的图片叠加功能实现,(bg_header.xml)

android:width="1dp"

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

android:left="2dp"

android:right="2dp"

android:top="2dp">

2: 列表中的下划线实现

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

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

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

mRecyclerView.addItemDecoration(new DividerItemDecoration(

getActivity(), DividerItemDecoration.VERTICAL_LIST));

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

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

@color/colorPrimary

@color/colorPrimaryDark

@color/colorAccent

//下划线的颜色修改

@drawable/item_bottom_line

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设置毕竟颜色时,黑色的边框给覆盖了

6525c0600427

device-2017-03-13-135550.png

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

android:left="2dp"

android:right="2dp"

android:top="2dp">

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐