前段时间遇到一个问题,listview中的item会向上偏移一个像素,导致本来在item底部的分割线看不见了,先说结论
listview 设置分割线透明不能用android:divider=”@color/transparent”,而要用android:divider=”@null”
当时感觉很奇葩,listview和item布局感觉写的都对,一直不知道为什么,后来没办法把布局中listview的属性都去掉,然后发现正常了,然后一个一个加回来,发现加上android:divider=”@color/transparent”后就不正常了,突然像是发现新大陆了,马上去看listview的setDivider方法其中
public void setDivider(Drawable divider) {
if (divider != null) {
mDividerHeight = divider.getIntrinsicHeight();
} else {
mDividerHeight = 0;
}
mDivider = divider;
mDividerIsOpaque = divider == null || divider.getOpacity() == PixelFormat.OPAQUE;
requestLayout();
invalidate();
}
@color/transparent是一个透明的颜色#00000000,当布局中使用android:divider=”@color/transparent”这样时,setDivider(Drawable divider)的divider参数不为null,而mDividerHeight = divider.getIntrinsicHeight();其中
public int getIntrinsicHeight() {
return -1;
}
mDividerHeight值是-1;
/**
* @return Returns the height of the divider that will be drawn between each item in the list.
*/
public int getDividerHeight() {
return mDividerHeight;
}
从上面方法的注释里可以看出mDividerHeight就是item分割线的高度,这样listview默认分割线的高度就成了-1,就会导致item向上偏移一个像素,设置listview的android:divider=”@null”,mDividerHeight会是0,这样才是我们想要的结果