大部分资料摘自CSDN大神郭霖的博客和公众号文章
dpi (dot per inch)
表示屏幕密度,是指每英寸上的像素点数。
密度
|
ldpi
|
mdpi
|
hdpi
|
xhdpi
|
xxdpi
|
xxxhdpi
|
dpi范围
|
0-120
|
120-160
|
160-240
|
240-320
|
320-480
|
480-640
|
典型示例
| | 320*480 |
480*800
|
1280*720
|
1920*1080
| 2560*1440 |
屏幕密度 | 0.75 | 1 | 1.5 | 2 | 3 |
4
|
整数比例 |
3
|
4
|
6
|
8
|
12
|
16
|
屏幕尺寸
设备的物理屏幕尺寸,指屏幕的对角线的长度,单位是英寸,1 inch = 2.54 cm。比如“5寸大屏手机”,就是指对角线的尺寸,5寸×2.54厘米/寸=12.7厘米。
屏幕分辨率
也叫显示分辨率,是屏幕图像的精密度,是指屏幕或者显示器所能显示的像素点有多少。一般以横向像素×纵向像素表示分辨率,如1200×1920表示此屏幕在宽度方向有1200个像素,在高度方向有1920个像素。
屏幕密度
是指每英寸上的像素点数,单位是dpi(dot per inch)或者ppi(pixels per inch),数值越高显示越细腻。屏幕密度与屏幕尺寸和屏幕分辨率有关。例如在屏幕尺寸一定的条件下,屏幕分辨率越高屏幕密度越大,反之越小。同理在屏幕分辨率一定的条件下,屏幕尺寸越小屏幕密度越大,反之越小。
计算示例:1920*1080分辨率的5寸手机,对角线分辨率约为2203,则屏幕密度dpi为2203/5≈400dpi
【注】上面的出现的0.75,1,1.5,2,3,4才是屏幕密度(density)。而120,160,240,320,480,640是屏幕密度dpi(densityDpi)。
实际密度与系统密度
实际密度:就是我们自己算出来的密度,这个密度代表了屏幕真实的细腻程度,如上述例子中的400dpi就是实际密度,说明这块屏幕每寸有400个像素。
系统密度:每部Android手机屏幕都有一个初始的固定密度,这些数值是120、160、240、320、480,这些就是Android为不同设备设定的系统密度。
得到实际密度以后,一般会选择一个最近的密度作为系统密度,系统密度是出厂预置的,如440dpi的系统密度就是和它最接近的480dpi;如果是330dpi的设备,它的系统密度就是320dpi。但是,现在很多手机不一定会选择这些值作为系统密度,而是选择实际的dpi作为系统密度,这就导致了很多手机的dpi也不是在这些值内。例如小米Note这样的xxhdpi的设备他的系统密度并不是480,而是它的实际密度440。
获取设备的上述属性
Android系统中有个DisplayMetrics的类,通过这个类就可以得到上述的所有属性。
DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
float density = displayMetrics.density; //屏幕密度
int densityDpi = displayMetrics.densityDpi;//屏幕密度dpi
int heightPixels = displayMetrics.heightPixels;//屏幕高度的像素
int widthPixels = displayMetrics.widthPixels;//屏幕宽度的像素
float scaledDensity = displayMetrics.scaledDensity;//字体的放大系数
float xdpi = displayMetrics.xdpi;//宽度方向上的dpi
float ydpi = displayMetrics.ydpi;//高度方向上的dpi