天天看點

關于Android适配,看完這篇文章就夠了

本文主要介紹了關于android界面适配的相關内容,适合1-3年的android開發工程師閱讀。

1. 為什麼要适配?

我們先來看一組統計資料和圖表。

【2014裝置分布圖 】  

關于Android适配,看完這篇文章就夠了

【2015裝置分布圖 】

關于Android适配,看完這篇文章就夠了

【裝置品牌分布 】

關于Android适配,看完這篇文章就夠了

【螢幕尺寸分布圖 】

關于Android适配,看完這篇文章就夠了

【系統分布圖 】

關于Android适配,看完這篇文章就夠了

【與ios的對比 】

關于Android适配,看完這篇文章就夠了

從上面幾個圖就可以看出android裝置多,品牌多,螢幕尺寸多,還有系統版本分布比較大,碎片化比較嚴重。這也就是android之是以要進行适配的原因。此外,android的适配包括了系統版本的适配,螢幕尺寸的适配等等。

2. 關于适配各種各樣的概念

機關

——px (pixel):像素,螢幕上的點,最小的獨立顯示機關,px均為整數,沒有小數。一般都是正方行像素參考連結

——in:表示英寸,每英寸相當于2.54厘米。

概念

——screen size(螢幕尺寸):螢幕的實體尺寸,表示的是對角線長,如手機螢幕3.5寸,就表示對角線長度為3.5寸,大概8.89厘米。

——螢幕分辨率:指螢幕在橫邊和縱邊上的像素點數,機關是px,比如1920*1080 3:

——螢幕像素密度:dpi(dots per inch),每英寸像素點數,比如120dpi,160dpi,它與螢幕尺寸與螢幕分辨率有關。

android機關與換算

dp 或者dip,裝置獨立像素,即密度無關像素,注意與dpi不同,以160dpi為基準,1dip=1px 螢幕密碼,density = dpi / 160,是以如個螢幕密度為1則1dp = 1px, 如果為2則1dp = 2px 3:sp(scale-independent pixels),字型的推薦機關,可以根據文字首選項進行大小縮放,官方建議最小使用值為12sp,其次盡量使用偶數值。

*dpi

mdpi → [120dpi ~ 160dpi]

hdpi → [160dpi ~ 240dpi]

xdpi → [240dpi ~ 320dpi]

xxdpi → [320dpi ~ 480dpi]

xxxdpi → [480dpi ~ 640dpi]

案例

比如一個手機螢幕分辨率480*800 , 螢幕尺寸3.7in,它的dpi是多少,在布局中寬設定320dp,該寬度為多少像素?

理論計算值:先計算出對角線的像素點數480 480 + 800 800 = 933933,再計算出每英寸的像素點數 933/3.7 = 252dpi,最終計算出的dpi為252。 計算320dp對應的像素值:首先計算出螢幕密度,螢幕密度值則相當于1dp對應的像素值: 320 (252/160) = 504px, (手機螢幕才480px,算出的寬度居然比螢幕還寬,如果成立,則說明如果在上訴螢幕上設定為320dp,則有一部分處于螢幕外)

注意:手機上面計算出的dpi為理論值,實際上隻有120(low)、160(medium)、240(high)、320(xhigh)等這幾種, 是以實際的計算公式為: 320 (240 /160)=480px,與螢幕寬度相同,說明在上訴螢幕設定為320dp,剛好占據整個螢幕。

3. 怎麼适配?

上面僅僅是知道了為什麼适配,和各種各樣的概念,那怎麼适配?這裡主要看手機,不涉及平闆适配。

切圖規則

從上面的概念我們知道,160dpi的時候 1dp=1px,是以在設計圖示時,(mdpi, hdpi,xhpi,xxhpi,xxhpi)的比例值為 2:3:4:6:8。比如系統icon,mdpi為4848,則xdpi為7272,比例值為1.5。 從上圖res結構看到有一類mipmap- *檔案夾,這個系統新加為了放置系統圖示的檔案夾。

各種圖示的尺寸

以下是官方建議的圖示尺寸

關于Android适配,看完這篇文章就夠了

寬度值設定

我們先來看看我們在一個界面中設定一個320dp寬度的一個view。

關于Android适配,看完這篇文章就夠了

從圖上可以看到不同的螢幕上展示了不同的效果(忽略平闆),有的手機上占滿了整個螢幕寬度,而有的手機上确隻占據螢幕寬度的一部分。是以在視覺出圖的時候,比如已800 * 480的尺寸出圖,标注占滿整個螢幕寬度240dp,則真實展現的效果則會在各個手機上不一緻。

是以在開發中,可以采用match_parent來設定占滿整個螢幕,如果是其他尺寸,可以采用自适應或者weight來設定view所占用的寬高。

限定符

我們從上面看到有*dpi作為了限定符,同時還有其他的比如large限定符,sw限定符等等限定符,就不一一展開了。

.9圖檔

.9圖為系統在圖檔周圍加一個像素的透明邊,圖檔必須要以.9作為描述符。 比如以一個圖檔來作為背景,如果不是.9圖檔,則如果内容區域大于圖示,則圖檔會被拉伸。下圖四個角都被拉伸了。

關于Android适配,看完這篇文章就夠了

下圖設定了圖檔的拉伸區域,則可以看到圖檔的四個角都未被拉伸,這樣最終呈現的視覺效果就好很多。

關于Android适配,看完這篇文章就夠了

标注位置:相鄰兩邊進行标注,不能隻标注一邊,也不能隻标注相對的兩邊,如果隻标注兩邊,則拉伸區域為相交部分,文本區域為右邊與下邊控制,如果不标注則沾滿整個寬度。

同時需要注意的是:圖檔可以分段标注,但圖檔最終拉伸的效果與标注的像素點有關,比如同一邊上下均被标注且上下像素點比為3:1,則最終拉伸比例也是3:1。

4. 更多tips

a:hdpi ,xhdpi等中的相同圖檔大小要成比例,這樣才能在相同螢幕不同分辨率下展現一緻。注意上面的2:3:4:6:8

b:同一類型,圖檔大小要一緻,可能多人做多個子產品,導緻切除的同一類型圖檔相差1,2個像素(可以建立一個資源庫,反查已有圖示尺寸)。

c:相同圖檔問題,不同人做不同子產品,很多圖示都是相同的,由于開發不同,會導緻一個包中有相同圖檔,這樣會導緻包大小增長。

d:能使用純色的圖檔,就讓開發盡量使用顔色值,不用切圖。

e:jpg與png圖檔相比較,jpg大小會小很多,如果有大圖且沒有模糊漸變等要求,盡量采用jpg格式。

f:很多簡單圖檔都能用代碼實作,比如圓,矩形等,可以讓開發用代碼實作,減少包的大小。

g:如果包的大小太大時,盡量保證更高尺寸的圖檔存在,這樣低螢幕密度的手機也能展現很清晰的圖檔,但是如果隻有小圖,就會放大拉伸,會導緻圖檔變形或者不清晰。

h:.9注意标注拉伸區域與内容區域,與圖檔外邊距的padding,可以在圖上直接标注。(如果内容區域上下距離不相等,再填充多行文字時會造成文字不居中,這時可以直接在圖檔上空出padding)

i:.9圖檔隻能拉伸不能壓縮,壓縮會導緻圖檔變形,是以在作圖過程中要确定一下圖檔的最小尺寸,(比如,給出一個确定高度的矩形區域,裡面放置一個初始高度大于矩形的.9圖檔,會導緻圖檔壓縮)。

j:.9圖檔一般隻做小尺寸就可以,除非邊框有漸變等元素,才做多個尺寸。

k:關于圖檔标注,美術要轉換一下機關,px轉換到相應的dp上,開發可以直接使用該數值。

l:關于字型,字型大小sp,但是如果字型呈現在一個固定高度的矩形框中時,再能調整字型大小的手機上時,可能會展示不全(展現字型的外部圖檔,背景等盡量不要寫死高度)。

m:标注圖檔時,如果一個icon占滿整個寬度,則可以不用标注icon寬度尺寸,隻需要标注距離邊框的尺寸,開發會采用自适應,如果确定寬度,在有的螢幕上隻能占據一半寬度,

關于Android适配,看完這篇文章就夠了

看到這裡,不知道你對自己的android開發經驗是不是有了更多的感悟~ 本周二,我們邀請了網易雲音樂資深移動開發工程師程寅與大家分享移動開發相關的工作經驗。

作者:孫有軍

來源:51cto

繼續閱讀