dp:Density-independent pixel 密度独立像素
sp:scale-independent pixel 缩放独立像素
sp与dp类似,不同的是,sp用于文字单位,可以根据系统设定,缩放文字大小。
在深入了解这两个单位之前,先普及一下其他基础单位:
px:像素,简单理解,就是屏幕上的点,比如分辨率为300*480,横向有320个点,竖直方向有480个点
dpi:dots per inch,屏幕上每英寸的点数,同样是分辨率为320*480的分辨率,在2X3英寸的屏幕上:
dpi=320/2=480/3=160。同样的分辨率,放到4X6英寸的屏幕上,dpi就只有80了,图像看起来会变得模糊
ppi:对角线上的像素点数/对角线的长度。ppi=dpi。常用的4.7,5.0英寸屏幕,指的就是对角线长度
dp的定义:在160dpi的屏幕上,1个像素所占的长度,1dp=1px=(2/320) inch = 1/160 inch。
可以把dp理解为一个固定的物理长度。
分辨率 | 尺寸 | dpi | dp | density |
---|---|---|---|---|
320*480 | 2X3 inch | 160 | 160 | 1 |
480*800 | 2X3 inch | 480/2=240 | 160 | 1.5 |
说明: (横向)
同样是2inch宽的屏幕上,320分辨率下,dpi为160,此时1dp=1px,屏幕宽度为 320dp
480分辨率下,dpi=480/2=240, 1dp=240/160=1.5px ,屏幕宽度为:480/1.5=320dp
可以这样理解:2inch /(1/160) inch = 320
获取和计算:
方法1:
DisplayMetrics outMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(outMetrics);
int width=outMetrics.widthPixels;
int hight=outMetrics.heightPixels;
float density=outMetrics.density;
int dpi=outMetrics.densityDpi;
方法2:
Resources resources = this.getResources();
DisplayMetrics dm = resources.getDisplayMetrics();
计算: dp=width/density
Android 项目不同文件夹的设置:
文件 | Size | DPI | Density |
---|---|---|---|
ldpi | 36*36 | 120 | 0.75 |
mdpi | 48*48 | 160 | 1 |
hdpi | 72*72 | 240 | 1.5 |
xhdpi | 96*96 | 320 | 2 |
xxhdpi | 144*144 | 480 | 3 |