Android中關於dip和px以及轉換的總結(重點推薦文章)

安迪潘發表於2011-08-27

我們在頁面佈局的時候,經常會設定容器的長度,但是到底該使用哪個作為長度的單位而懊惱。在Android中支援的描述大小區域的型別有以下幾種:


px(pixels)——畫素:不同的裝置顯示效果相同,一般我們HVGA代表320x480畫素,這個用的比較多。


dip(device independent pixels)——裝置獨立畫素:這個和裝置硬體有關,一般我們為了支援WCGA、HVGA和QVGA推薦使用這個,不依賴於畫素。等同於dp。


sp(scaled pixels—best for text size)——帶比例的畫素。


pt(points)——磅:1pt = 1/72英寸


in(inches)——英寸


mm(millimeters)——毫米


到底px和dip有什麼區別呢?


dip != px


主要是針對不同裝置而言的。在Density是160的裝置上,比如用AVDManager建立的預設模擬器,dip和px是一樣的但是如果同樣的程式碼,換到不同Density的裝置上,比如換到一個Density是240的裝置上,dip和px體現出來的大小就不一樣了。px不管在什麼樣的裝置上都是那樣長,但是dip會根據裝置變化;WQVGA屏density=120;QVGA屏density=120;HVGA屏density=160;WVGA屏density=240;density值表示每英寸有多少個顯示點,與解析度是兩個概念。

當螢幕density=240時使用hdpi標籤的資源
當螢幕density=160時,使用mdpi標籤的資源
當螢幕density=120時,使用ldpi標籤的資源。

不加任何標籤的資源是各種解析度情況下共用的。佈局時儘量使用單位dip,少使用px。

換算公式為:
pixs =dips * (densityDpi/160)

dips=(pixs*160)/densityDpi


如何獲得裝置的螢幕解析度和螢幕密度?

如解析度為480*800,密度為240的裝置,方法如下:

DisplayMetrics dm =getResources().getDisplayMetrics();
dm.densityDpi=240
dm.widthPixels=480
dm.heightPixels=800

原文地址:http://www.eoeandroid.com/thread-71027-1-1.html

相關文章