px、dp與sp的區別以及換算


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);  
    } 

 

 

參考自:

 Supporting Multiple Screens

 Android中dip、dp、sp、pt和px的區別詳解

 px 與 dp, sp換算公式?

 [Android問答] px、dp和sp,這些單位有什么區別?

 利用DisplayMetrics獲取屏幕信息

  Android視覺規范-間距規范與文字規范單位換算(dip、sp與px)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM