android裏px、dip、dp、dpi的關係

 有一段日子,關係像素的問題一直困擾着我,理不清他們之間的關係,直到在網上查閱了很多相關知識後,纔有了

比較清楚的認識,感謝度娘!現作爲筆記寫下來,也希望能對別人有所幫助。

px:平常所說的1920×1080說的是像素數量,也就是1920px×1080px,代表手機高度上有1920個像素點,寬度上

1080個像素點。我們在做android ui開發時不建議使用px單位,因爲同樣100px的圖片,在不同手機上顯示的際大小

可能不同。

dpi:像素密度。假設有一部手機,屏幕的物理尺寸爲1.5英寸x2英寸,屏幕分辨率爲240x320,則我們可以計算出在

這部手機的屏幕上,每英寸包含的像素點的數量爲240/1.5=160dpi(橫向)或320/2=160dpi(縱向),160dpi就是這部

手機的像素密度,像素密度的單位dpi是Dots Per Inch的縮寫,即每英寸像素數量。橫向和縱向的這個值都是相同的,原因

是大部分手機屏幕使用正方形的像素點。Android系統定義了四種像素密度:低(120dpi)、中(160dpi)、高(240dpi)

和超高(320dpi),它們對應的dp到px的係數分別爲0.75、1、1.5和2,這個係數乘以dp長度就是像素數。例如界面上有一

個長度爲“80dp”的圖片,那麼它在240dpi的手機上實際顯示爲80x1.5=120px,在320dpi的手機上實際顯示爲80x2=160px。

如果你拿這兩部手機放在一起對比,會發現這個圖片的物理尺寸“差不多”,這就是使用dp作爲單位的效果。

dp和dip:一樣的概念。其實dp就是爲了使得開發者設置的長度能夠根據不同屏幕(分辨率/尺寸也就是dpi)獲得不同的像

數數量(px)。如:我將一個控件設置長度爲1dp,那麼在160dpi上該控件長度爲1px,在240dpi的屏幕上該控件的長度爲

1*240/160=1.5個像素點,也就是dp會隨着不同屏幕而改變控件長度的像素數量。記住一點,dp最終都要化爲像素數量來衡

量大小的,因爲只有像素數量最直觀。我們在做ui時一般就得使用dp作爲單位。

sp:與縮放無關的抽象像素(Scale-independent Pixel)。sp和dp很類似但唯一的區別是,Android系統允許用戶自定義

文字尺寸大小(小、正常、大、超大等等),當文字尺寸是“正常”時1sp=1dp=0.00625英寸,而當文字尺寸是“大”或“超

大”時,1sp>1dp=0.00625英寸。類似我們在windows裏調整字體尺寸以後的效果——窗口大小不變,只有文字大小改變。

也就是說sp是用來指定字體的大小。

 dp轉px:對於android 來說,最終我們能讀懂或者衡量的都是px,所以最後我們都將dp化爲px好理解一點。我總結了dp轉

px的公式:dp值×(當前dpi/160dpi)= 當前的像素數目。 那麼“當前dpi”怎麼知道是多少呢?當然也有方法的,我們可以寫代

獲得:

  

DisplayMetrics dm = new DisplayMetrics();

getWindowManager().getDefaultDisplay().getMetrics(dm);

int densityDpi = dm.densityDpi; //當前dpi:120/160/240/320

float density = dm.density;    //0.75/1.0/1.5/2.0

也可以用dp值×density得到px的值。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章