1. 概念解释
屏幕尺寸
手机对角线的物理尺寸,单位:英寸(inch),1英寸=2.54cm
屏幕分辨率
手机在横向、纵向上的像素点数的总和,由横向像素数 * 纵向像素数表示(1280*720),每个像素都是1px
屏幕PPI(屏幕像素密度)
表示每英寸像素数,则在相同尺寸下,PPI越高,则越清晰。在PPI相同的情况下,屏幕尺寸越大,越模糊。

eg:小米8的像素密度为402PPI
DPI
是印刷业使用的单位,其表示的是打印纸上每一英寸包含的墨点数量,网络上的观点是Google误用了该单位。在android中可以将PPI与DPI等价看待。
物理上DPI值是一个固定值,无法修改。但Android系统中的densityDpi
参数可以通过root或adb命令修改。修改后会有一个Physical density
与Override density
。
Density
DisplayMetrics.density
该density是为了方便px与dp的转换,额外提供了此参数,density = densityDpi / 160。
adb shell wm density
这个density其实就是dpi的概念。
很多文章中的density也就是指的是dpi。
DP
密度无关像素(density-independent pixel),与终端上的实际物理像素点无关。
在dpi = 160的设备上,1dp=1px。当dpi提升到240时,1dp所能表示的像素点提高,扩大到(240/160)=1.5倍,此时1dp=1.5dp。
dp与px转换可以使用 px = dp * (densityDpi / 160)
或者px = dp * density
。
SP
可缩放像素,与dp基本相同,用于字体大小设置。唯一不同就是sp会随着系统设置的字体缩放进行缩放。