listview的item向上偏移

前段时间遇到一个问题,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,这样才是我们想要的结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值