Android px 與 dp, sp換算公式

yangxi_001發表於2015-12-15

PPI = Pixels per inch,每英寸上的畫素數,即 "畫素密度"

  • xhdpi: 2.0
  • hdpi: 1.5
  • mdpi: 1.0 (baseline)
  • ldpi: 0.75

drawable-ldpi、drawable-mdpi、drawable-hdpi 精度分別為低、中(android預設)、高。
對應的圖片大小為:36x36、48x48、72x72。

xxhdpi: 144*144
xhdpi:96*96
hdpi:72*72
mdpi:48*48
ldpi:36*36 

dp是虛擬畫素,在不同的畫素密度的裝置上會自動適配,比如:
在320x480解析度,畫素密度為160,1dp=1px
在480x800解析度,畫素密度為240,1dp=1.5px
計算公式:1dp*畫素密度/160 = 實際畫素數

drawable- hdpi、drawable- mdpi、drawable-ldpi的區別:
(1)drawable-hdpi裡面存放高解析度的圖片,如WVGA (480x800),FWVGA (480x854)
(2)drawable-mdpi裡面存放中等解析度的圖片,如HVGA (320x480)
(3)drawable-ldpi裡面存放低解析度的圖片,如QVGA (240x320)
系統會根據機器的解析度來分別到這幾個資料夾裡面去找對應的圖片。


 ppi的運算方式是:

PPI = √(長度畫素數² + 寬度畫素數²) / 螢幕對角線英寸數

dp:Density-independent pixels,以160PPI螢幕為標準,則1dp=1px,

dp和px的換算公式 :
dp*ppi/160 = px。比如1dp x 320ppi/160 = 2px。

sp:Scale-independent pixels,它是安卓的字型單位,以160PPI螢幕為標準,當字型大小為 100%時, 1sp=1px。

sp 與 px 的換算公式:sp*ppi/160 = px 

總結得出:

px = dp*ppi/160
dp = px / (ppi / 160)

px = sp*ppi/160
sp = px / (ppi / 160)

dp = sp? 

參考:

[無線手冊-4] dp、sp、px傻傻分不清楚[完整] 
http://zhuanlan.zhihu.com/zhezhexiong/19565895

Supporting Different Screens | Android Developers
http://developer.android.com/training/basics/supporting-devices/screens.html#create-bitmaps

Iconography | Android Developers
http://developer.android.com/design/style/iconography.html

Devices and Displays | Android Developers
http://developer.android.com/design/style/devices-displays.html

相關文章