1,Android 中 常用的单位
屏幕尺寸、屏幕分辨率、屏幕像素密度
dp、dip、dpi、sp、px
mdpi、hdpi、xhdpi、xxhdpi、xxxhdpi
2,屏幕尺寸、屏幕分辨率、屏幕像素密度
【1】屏幕尺寸
-
屏幕对角线长度,单位是英寸,我们常说的多少多少寸,比如4.7寸手机、5.7寸手机,指的就是这个。
-
手机大小
【2】屏幕分辨率
-
是指在手机屏幕的像素点的个数,单位是px,1px=1像素点,一般是纵向像素横向像素,如1920×1080,意味着高有1920个像素点,宽有1080个像素点。
【3】屏幕像素密度
-
是指每英寸上的像素点数,单位是dpi(dot per inch)。像素密度和屏幕尺寸和屏幕分辨率有关,它是由对角线的像素点数除以屏幕的大小得到的,
-
单一变化条件下,屏幕尺寸越小、分辨率越高,像素密度越大,反之越小。
-
关系如下:根号下 高的平方+宽的平方 / 屏幕尺寸大小
-
代码获取dpi
DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
// 密度
float density = displayMetrics.density;
密度(每寸像素)
int densityDpi = displayMetrics.densityDpi;
3,dp、dip、dpi、sp、px
【1】dp:
-
是 Android 特有的,意为密度无关像素,Google 发布的 BASELINE(基准线)为 160,以此为基准。
dp = dpi/160
【2】dip:Density Independent Pixels,同dp。
【3】dpi:即为屏幕像素密度的单位
-
每英寸上的像素点数,单位是dpi
-
dpi 的算法
-
根号下 高的平方+宽的平方 / 屏幕尺寸大小 (dpi = px总和 /屏幕尺寸)
-
1920x1920+1080x1080 开根号 / 手机英寸 dpi
-
比如拿Nexus 5 分辨率1920*1080 屏幕尺寸5.0
-
1920*1920=3686400
1080*1080=1166400
3686400+1166400=4852800
根号4852800 /5 = 440.581434016 320- 480之间
【4】sp:Scale-Independent Pixels的缩写,可以根据文字大小首选项自动进行缩放。
-
Google推荐我们使用12sp以上的大小,通常可以使用12sp,14sp,18sp,22sp,为避免精度损失,建议最好不要使用奇数和小数。
【5】px:就是我们常说的像素
【6】density: 屏幕密度,density和dpi的关系为 density = dpi/160
4,mdpi、hdpi、xhdpi、xxhdpi、xxxhdpi
【1】常用的dpi 的换算
-
1dp 在不同分辨率上显示多少px
|
常见分辨率名 |
屏幕分辨率 |
dpi(范围值) |
density |
1dp=“x”px (px=dpi/Baseline) |
|
ldpi |
320x240 |
120 |
density=0.75 |
1 dp = 0.75px (120dpi/160=0.75px) |
|
mdpi |
480x320 |
160(Baseline) |
density=1 |
1 dp = 1px (160dpi/160=1px) |
|
hdpi |
800x480 |
240 |
density=1.5 |
1 dp = 1.5px (240dpi/160=1.5px) |
|
xhdpi |
1280x720 |
320 |
density=2 |
1 dp = 2px (320dpi/160=2px) |
|
xxhdpi |
1920x1080 |
480 |
density=3 |
1 dp = 3px (480dpi/160=3px) |
|
xxxhdpi |
3840×2160 |
640 |
density=4 |
1 dp = 4px (640dpi/160=4px) |
文档中介绍他们之间的关系,告知他们的比例为2:3:4:6:8,其实就是160、240、320、480、640的比例。
配以图说明如下: