1、px
即像素,1px代表屏幕上的一個物理像素點。
2、dp
dip:device independent pixels(設備獨立像素),dp與dip一樣,不同的設備有不同的顯示效果,一般為了支持WVGA、HVGA和QVGA推薦使用這個,不依賴像素。
3、sp
sp:scale-independent pixels(縮放獨立像素),與縮放無關的抽象像素,它和dp很相似,但唯一的區別在於,Android系統允許用戶自定義文字尺寸大小(小,正常,大,超大等),當文字尺寸是“正常”時,1sp=1dp=0.00625inch(英寸),當文字尺寸是“大”或“超大”時,1sp>1dp=0.00625inch
4、dpi
dpi:dots per inch(每英寸點數,或者說每英寸像素數目 更易懂),由設備決定,是寫死的,可以通過context.getResources().getDisplayMetrics().densityDpi獲取到。當然,也可以通過以下方法算出:
dpi=橫向分辨率/橫向英寸數=縱向分辨率/縱向英寸數
Google 規定的屏幕密度列表:
- ldpi (low) ~120dpi
- mdpi (medium) ~160dpi
- hdpi (high) ~240dpi
- xhdpi (extra-high) ~320dpi
- xxhdpi (extra-extra-high) ~480dpi
- xxxhdpi (extra-extra-extra-high) ~640dpi
__________________________________________________________________________________
dp與px
px=dp*(dpi/160)
dp=px/(dpi/160)
sp與px
px=sp*(dpi/160)
sp=px/(dpi/160)
_____________________________________________________________________________
獲取DisplayMetrics對象方法:
DisplayMetrics dm=new DisplayMetrics(); //獲得DisplayMetrics對象方法一 //dm=context.getResources().getDisplayMetrics(); //獲得DisplayMetrics對象方法二 ((Activity)context).getWindowManager().getDefaultDisplay().getMetrics(dm);
px轉其他單位代碼:(該方法來自TypedValue)
public static float applyDimension(int unit, float value, DisplayMetrics metrics) { switch (unit) { case COMPLEX_UNIT_PX: return value; case COMPLEX_UNIT_DIP: return value * metrics.density; case COMPLEX_UNIT_SP: return value * metrics.scaledDensity; case COMPLEX_UNIT_PT: return value * metrics.xdpi * (1.0f/72); case COMPLEX_UNIT_IN: return value * metrics.xdpi; case COMPLEX_UNIT_MM: return value * metrics.xdpi * (1.0f/25.4f); } return 0; }
另外一種px轉dp的代碼:
/** * 根據手機的分辨率從 px(像素) 的單位 轉成為 dp */ public static int px2dip(Context context, float pxValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (pxValue / scale + 0.5f); }
dp轉px:
/** * 根據手機的分辨率從 dp 的單位 轉成為 px(像素) */ public static int dip2px(Context context, float dpValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (dpValue * scale + 0.5f); }
參考自: