1.px(pixel):px 也叫像素, 1px 代表屏幕上的一个像素点, 通常所说的分辨率 480*320 表示屏幕竖直方向有 480 个 px, 水平方向有 320 个 px. 是构成 dpi,dp,sp 的基础.
2.dpi(dots per inch): 即屏幕对角线每英寸的像素点个数. 假设有一台 5 寸 (手机屏幕对角线长度) 手机, 高和宽分别为 4 寸和 3 寸, 手机分辨率为 640*480, 代表屏幕竖直方向有 640 个 px, 水平方向有 480 个 px, 对角线方向有 800 个 px, 那么 dpi = 800/5 = 160.
3.dp(device independent pixels):Android 规定在 dpi = 160 时, 1dp = 1px. 当 dpi 为 x 时, 1dp = (x/160)px, 例如 x = 320dpi 时, 1dp = 2px. 通常用于控件的尺寸大小.(dp 最后还是要转换成 px, 因为 px 才是表示实际的大小)
4.sp(scale independent pixels):sp 和 dp 很类似, 区别在于当用户设置文字尺寸为 "正常" 时 1sp = 1dp, 当设置为 "大" 或 "超大" 时 1sp>1dp. 通常用于文字的尺寸大小.
一: 为何定义控件大小时推荐使用 dp 而不是 px?
假设有两台 5 寸手机 A 和 B, 它们的物理尺寸为 4*3 寸, 但是分辨率不同, A 手机分辨率为 640*480,B 手机分辨率为 1280*960. 那么 A 手机的 dpi = 160,B 手机的 dpi = 320. 所以在 A 手机上 1dp = 1px, 在 B 手机上 1dp = 2px.
假设在 A 和 B 手机上分别定义一个控件, 高为 20dp, 宽为 100dp, 那么在 A 手机上该控件的高为 20px, 宽为 100px, 在 B 手机上该控件的高为 40px, 宽为 200px, 虽然在 B 手机上该控件占的 px 更多, 但是该控件在 A 和 B 手机上的实际物理大小是一样的, 这就实现了设备分辨率无关, 在不同分辨率的手机上自动适配.
而如果使用 px 来定义控件大小, 那么即使手机的物理尺寸相同, 但由于手机分辨率不同, 控件呈现的实际物理大小就会不一样.
来源: http://www.bubuko.com/infodetail-3319367.html