-
px
: 其实就是像素单位,比如我们通常说的手机分辨列表800*400都是px的单位 。 -
dp
: 虚拟像素,在不同的像素密度的设备上会自动适配。 -
sp
: 同dp相似,还会根据用户的字体大小偏好来缩放 。
一、dp
dp
也叫dip
,是device independent pixels
。设备不依赖像素的一个单位。在不同的像素密度的设备上会自动适配,比如:
在320x480分辨率,像素密度为160,1dp=1px ;
在480x800分辨率,像素密度为240,1dp=1.5px ;
计算公式:px = dp * (dpi/160)
使用dp作为单位的,会根据不同的设备进行转化,适配不同机型。所以建议在长度宽度的数值使用dp作为单位。
dp与px值转换的工具类:
public class DensityUtil {
/**
* 根据手机的分辨率从 dp 的单位 转成为 px(像素)
*/
public static int dp2px(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
/**
* 根据手机的分辨率从 px(像素) 的单位 转成为 dp
*/
public static int px2dp(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}
}
二、sp
sp作为字体大小单位,会随着系统的字体大小改变,而dp作为单位则不会。所以建议在字体大小的数值要使用sp作为单位
网友评论