由於市場上Android手機種類繁多,Android應用多分辨率適配工作必不可少。
一般來說,屏幕分配分爲,屏幕尺寸,屏幕方向,屏幕像素密度。
(1)屏幕尺寸
屏幕尺寸是根據屏幕大小進行匹配,例如small,normal,large,xlarge等等這一類匹配目前已經很少使用。
(2)屏幕方向
屏幕方向分爲port豎屏和land橫屏兩種,通常開發時如果支持橫屏顯示,都會另寫一套橫向的佈局文件。
(3)屏幕像素密度
屏幕像素密度指單位長度屏幕顯示的像素,即常說的dpi(dots per inch),每英寸點數。密度越高顯示畫面就越清晰。
Android根據像素密度按區間範圍分成幾種:
密度區間 | ldpi | mdpi | hdpi | xhdpi | xxhdpi | xxxhdpi |
---|---|---|---|---|---|---|
dpi | 120 | 160 | 240 | 320 | 480 | 640 |
1dp對應像素數 | 0.75 | 1.0 | 1.5 | 2.0 | 3.0 | 4.0 |
當新建一個Android工程時,在res目錄下可以看到drawable-xxx目錄,就是對應不同像素密度的資源。系統會優先從該目錄中尋找圖片,如果找不到會從其他目錄尋找。因此對應不同密度設備,我們需要爲其準備不同畫質的圖片,以便獲得更好的效果。
Android將mdpi像素作爲基準線進行匹配,dp與px的換算關係如下,
px= dp * (dpi / 160 )
官方建議使用dp作爲佈局單位,這樣不同的dpi設備上,換算出來的px也會相應的自適應。
爲了更清楚地看清不同dpi機型上的px的換算規律,做了以下實驗。
測試機型:
(1) 320dpi機型 A
(2) 160dpi機型 B
測試圖片:
一張48×48的圖片分別存放在drawable,drawable-mdpi,drawable-hdpi目錄下,圖片名稱分別爲
test1.png,test2.png,test3.png。
實驗結果:
機型A上面顯示效果,
test1.png 顯示大小爲 96×96像素
test2.png 顯示大小爲 96×96像素
test3.png 顯示大小爲 64×64像素
機型B上面顯示效果,
test1.png 顯示大小爲 48×48像素
test2.png 顯示大小爲 48×48像素
test3.png 顯示大小爲 32×32像素
實驗結論:
通過如上實驗,我們知道一張圖片實際顯示大小與機型dpi和drawable文件夾dpi均相關。
手機顯示像素 = 圖片實際像素尺寸 × 機型DPI / 所在資源目錄DPI
例如,在320dpi的機型上,將48×48像素的圖片放入drawable-hdpi目錄,該圖片實際顯示像素 = 48* 320/ 240 = 64像素。
所以爲了獲得更好的顯示效果,每種dpi分辨率的機型,均需要搭配一張對應尺寸圖片,以防止被縮小或者拉大。