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来定义控件大小,那么即使手机的物理尺寸相同,但由于手机分辨率不同,控件呈现的实际物理大小就会不一样。