轉載請注明出處,謝謝!http://www.cnblogs.com/coding-way/p/3457878.html
Android設備種類多樣,要想適配好各種屏幕,理解各種屏幕數據是必須的。首先先從DisplayMetircs類聊起,DisplayMetircs類可以很方便的獲取屏幕相關的信息,使用方法如下:
DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics);
下面解釋下DisplayMetircs類里的屬性:
widthPixels、heightPixels | 這兩個屬性就是屏幕寬和高的絕對像素,比如:1280,800。 |
xdpi、ydpi | dpi(density independent pixel)這兩個屬性是對應X軸和Y軸的,每英寸像素數,比如一個像素為240x320,大小為1.5"x2"的屏幕,其xdpi=240/1.5=160,ydpi=320/2=160。注意這個值不一定是整數。 |
densityDpi | 這個值不是精確值,他只代表了屏幕dpi的基准,常用的取值為120、160、240、320等。這個屬性對應/layout-ldpi、/layout-mdpi、/layout-hdpi等自動適配的布局文件。 |
density | 真實dpi(對角線的像素/對角線的英寸)與基准dpi(160)的比值,比如:一個320x480,大小為1.5"x2"的屏幕,其density=240/160=1.5。這個值是給單位dip和單位px換算用的,dip=density*px,后面會詳細說明。 |
scaledDensity | 這個值與density一樣, 但在運行中會根據用戶設置的系統字體大小來動態調整。 |
了解了這些基礎知識后,各種單位就好理解了:
px (pixels,像素) | 顧名思義,實際的像素點數。像素的缺點很明顯,Android設備的像素種類很多,如果一個控件的像素為320x320,那么在240x320的屏幕中顯示將不完整,所以我們要為每一種屏幕像素配置一種大小,這顯然不現實,所以google不推薦使用這個單位。 |
pt (point,磅) | 1pt=1/72英寸,一般用作字體單位,這個同px,都是無法動態調整的單位,不推薦。 |
dip (Density Independent Pixel,密度無關像素,也可寫dp) | 為了解決多種像素適配的問題,android引入了dip單位,這個單位的換算公式為:dip/pixels=屏幕dpi/160,而density=屏幕dpi/160,所以dip = density*pixels,也就是說,如果屏幕為240x320,1.5"x2"尺寸,則其dpi為160,density=1,那么一個dip相當與一個px;如果屏幕像素增加到480x800,尺寸不變,那么其dpi為320,density=2,則一個dip相當與兩個px,這樣就達到了縮放的目的。 |
sp (scaled pixels,縮放像素) | 類似dip,同樣是動態調整的,不過是依據屏幕密度density和用戶設置的系統字體大小來調整的,所以sp使用於設置字體的大小。 |
mm (millimeters,毫米) | 普通長度單位,基於屏幕的實際尺寸。 |
in (inches,英寸) | 普通長度單位,基於屏幕的實際尺寸。 |