px :是屏幕的像素點
in :英寸
mm :毫米
pt :磅,1/72 英寸
dp :一個基於density的抽象單位,如果一個160dpi的屏幕,1dp=1px
dip :等同於dp
sp :同dp相似,但還會根據用戶的字體大小偏好來縮放。
建議使用sp作爲文本的單位,其它用dip
dip和px 的關係:
QVGA: density=0.75; densityDpi=120; QVGA(240*320)
HVGA: density=1.0; densityDpi=160; HVGA(320*480)
VGA: density=1.0; densityDpi=160; VGA(480*640)
WVGA: density=1.5; densityDpi=240; WVGA(480*800)
WQVGA:density=2.0; densityDpi=120; WQVGA(240*400)
densityDip值表示每英寸有多少個顯示點,與分辨率是兩個概念
不同densityDpi下屏幕分辨率信息,以480dip*800dip的 WVGA(density=240)爲例
densityDpi=120時
屏幕實際分辨率爲240px*400px (兩個點對應一個分辨率)
狀態欄和標題欄高各19px或者25dip
橫屏是屏幕寬度400px 或者800dip,工作區域高度211px或者480dip
豎屏時屏幕寬度240px或者480dip,工作區域高度381px或者775dip
densityDpi=160時
屏幕實際分辨率爲320px*533px (3個點對應兩個分辨率)
狀態欄和標題欄高個25px或者25dip
橫屏是屏幕寬度533px 或者800dip,工作區域高度295px或者480dip
豎屏時屏幕寬度320px或者480dip,工作區域高度508px或者775dip
densityDpi=240時
屏幕實際分辨率爲480px*800px (一個點對於一個分辨率)
狀態欄和標題欄高個38px或者25dip
橫屏是屏幕寬度800px 或者800dip,工作區域高度442px或者480dip
豎屏時屏幕寬度480px或者480dip,工作區域高度762px或者775dip
apk的資源包中
當屏幕densityDpi=240時,使用hdpi 標籤的資源
當屏幕densityDpi=160時,使用mdpi標籤的資源
當屏幕densityDpi=120時,使用ldpi標籤的資源
不加任何標籤的資源是各種分辨率情況下共用的
佈局時儘量使用單位dip,少使用px
dp與px換算公式:
pixs =dips * (densityDpi/160).
dips=(pixs*160)/densityDpi
dp與px轉換的方法:
public static int dip2px(Context context, float dipValue){
final float scale = context.getResources().getDisplayMetrics().density;
return (int)(dipValue * scale +0.5f);
}
public static int px2dip(Context context, float pxValue){
final float scale = context.getResource().getDisplayMetrics().density;
return (int)(pxValue / scale +0.5f);
}
VGA : 640*480
QVGA : 320*240
HVGA : 320*480
WVGA : 800*480
WQVGA : 480X272或400X240