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來定義控件大小,那么即使手機的物理尺寸相同,但由於手機分辨率不同,控件呈現的實際物理大小就會不一樣。