Android之dp,px计量单位

1.dp,dpi,px,sp计量单位区别

答:px:屏幕的像素点,也成像素。依赖于物理设备

sp:用于设置字体大小

dpi:像素密度,一英寸包含的像素数。常见120,240,360。分辨率纵横方向上的总像素数,比如:480X800。 

即 drawable-ldpi: 屏幕密度为120的手机设备 
     drawable-mdpi: 屏幕密度为160的手机设备 
     drawable-hdpi: 屏幕密度为240的手机设备 
     drawable-xhdpi: 屏幕密度为320的手机设备 
     drawable-xxhdpi:屏幕密度为480的手机设备
         

dp:设备无关像素。

这里说的不依赖于设备,是图片的大小相对于不同设备屏幕大小的比例是一样的。如果一个图片100px宽,在尺寸不同的设备上大小是不同的。为了使得dp不依赖设备,这里就要用到dpi。dpi的大小其实是约定好的,只会有120/160/240/320/480这几种,我们选其中一种作为基准来定义dp: 
在屏幕密度为160dpi的情况下, 1dp = 1px。 mdpi
有了这个基准,其他设备就能很快换算出它的展示大小。比如240dpi的设备,1dp = 1.5px。

通过dpi和一个基准的定义,我们就使得dp对与开发者来说是不依赖于设备的了.

2.dp与px转换

答:dp和px之间的联系取决于具体设备上的像素密度。像素密度就是DisplayMetrics里的density参数。当density=1.0时表示 1dp=1px。density=1.5时,1dp=1.5px。具体的转换函数如下:

//根据手机分辨率从dp的单位转换成px
public static int dip2px(Context context,float dpValue){

    //获取当前手机的像素密度
    final float scale = context.getResources().getDisplayMetrics().density;
    return(int)(dpValue*scale + 0.5f);//四舍五入取整
}

//根据手机分辨率从px的单位转换成dp
public static int px2dip(Context context,float pxValue){

    //获取当前手机的像素密度
    final float scale = context.getResources().getDisplayMetrics().density;
    return(int)(pxValue/scale + 0.5f);//四舍五入取整
}

你可能感兴趣的:(Android,Studio)