一? 機(jī)型適配介紹
1、 Android中機(jī)型適配出現(xiàn)的原因
由于Android系統(tǒng)的開放性,任何用戶、開發(fā)者、OEM廠商、運(yùn)營商都可以對Android進(jìn)行定制,修改成他們想要的樣子。結(jié)果導(dǎo)致Android設(shè)備出現(xiàn)大量的"碎片化"的現(xiàn)象。
碎片化具體更多的表現(xiàn)在系統(tǒng)碎片和屏幕碎片兩個方面。下圖中,每一個矩形就代表了一種Android設(shè)備。

2、 機(jī)型適配的思路
6個主流分辨率:800*480、480*320、1280*720、854*480、960*540、1920*1080
適配的基本思路是用通用的代碼盡可能適配更多的機(jī)型,特殊機(jī)型特殊處理。機(jī)型適配主要包括三個方面的適配:屏幕適配、版本適配和語言適配。
二 屏幕相關(guān)概念
1、 屏幕尺寸、屏幕分辨率、屏幕像素密度
屏幕尺寸:指屏幕的對角線的長度,單位是英寸,1英寸=2.54厘米
屏幕分辨率:指在橫縱向上的像素點(diǎn)數(shù),單位是px,1px=1個像素點(diǎn)
屏幕像素密度是:指每英寸上的像素點(diǎn)數(shù),單位是dpi,即“dot per inch”的縮寫。
2、 獲得屏幕分辨率和密度
DisplayMetrics 類提供了關(guān)于顯示的通用信息的方法,如顯示大小,分辨率等。
? 獲得屏幕分辨率和密度
? dp轉(zhuǎn)px
? px轉(zhuǎn)dp
? 獲得系統(tǒng)狀態(tài)欄高度
3、 dp\dip、sp、px
px:像素。比如UI設(shè)計、Android原生API都會以px作為統(tǒng)一的計量單位,像是獲取屏幕寬高等。
dip/dp:ensity Independent
Pixels的縮寫,即密度-無關(guān)像素。在Android中,規(guī)定以160dpi為基準(zhǔn),1dip=1px,如果密度是320dpi,則1dip=2px,以此類推。寫布局的時候要盡量使用dp而不是px。
sp:scale-independent pixels,與dp類似,但是可以根據(jù)文字大小首選項(xiàng)進(jìn)行放縮,是設(shè)置字體大小的御用單位。
4、 mdpi、hdpi、xhdpi、xxhdpi
mdpi、hdpi、xhdpi、xxhdpi、xxxhdpi用來修飾Android中的drawable文件夾及values文件夾,用來區(qū)分不同像素密度下的圖片和dimen值。
其實(shí)之前還有個ldpi,但是隨著移動設(shè)備配置的不斷升級,這個像素密度的設(shè)備已經(jīng)很罕見了,所在現(xiàn)在適配時不需考慮。
nodpi,這個限定被用于不想根據(jù)匹配的設(shè)備分辨率進(jìn)行縮放的位圖資源。
tvdpi,在mdpi和hdpi之間的屏幕,大約是213dpi。大多數(shù)是為電視來考慮的。
級別 屏幕密度 dpi 屏幕比率 通常分辨率 px 圖標(biāo)大小 px
ldpi 120 0.75
mdpi 160 1 320*480 48*48
hdpi 240 1.5 480*800 72*72
xhdpi 320 2 720*1280 96*96
xxhdpi 480 3 1080*1800 144*144
xxxhdpi 640 4 1200*1960 192*192
三 機(jī)型適配的解決方案
1、 屏幕適配
? 使用wrap_content、match_parent、weight
? 使用相對布局禁用絕對布局
? 盡量使用Fragment開發(fā)界面
? 使用尺寸限定符
mdpi、hdpi、xhdpi、xxhdpi、xxxhdpi \ small \ normal \ large \ xlarge
【備注】
layout-small(屏幕尺寸小于3英寸左右的布局)
layout-normal(屏幕尺寸小于4.5英寸左右)
layout-large(4英寸-7英寸之間)
layout-xlarge(7-10英寸之間)
? 使用最小寬度限定符
swdp 、 wdp 、 hdp
【備注】
在android3.2以前,所有的資源文件都有相應(yīng)的xhdpi,hdpi,mdpi,ldpi四種文件來對應(yīng),android3.2以后,為了提供更精準(zhǔn)的對布局文件的控制,可以通過為資源文件(res目錄下文件)增加后綴來指定該文件夾里的xml布局文件或color.xml,string.xml是為哪種大小的屏幕使用。
第一種后綴:swdp,如layout-sw600dp, values-sw600dp smallwidth
這里的sw代表smallwidth的意思,當(dāng)你所有屏幕的最小寬度都大于600dp時,屏幕就會自動到帶sw600dp后綴的資源文件里去尋找相關(guān)資源文件,這里的最小寬度是指屏幕寬高的較小值,每個屏幕都是固定的,不會隨著屏幕橫向縱向改變而改變。
第二種后綴wdp 如layout-w600dp, values-w600dp
帶這樣后綴的資源文件的資源文件制定了屏幕寬度的大于Ndp的情況下使用該資源文件,但它和swdp不同的是,當(dāng)屏幕橫向縱向切換時,屏幕的寬度是變化的,以變化后的寬度來與N相比,看是否使用此資源文件下的資源。
第三種后綴hdp 如layout-h600dp, values-h600dp
這個后綴的使用方式和wdp一樣,隨著屏幕橫縱向的變化,屏幕高度也會變化,根據(jù)變化后的高度值來判斷是否使用hdp
,因?yàn)槠聊辉诳v向上通常能夠滾動導(dǎo)致長度變化,不像寬度那樣基本固定,google官方文檔建議盡量少使用這種方式。
? 使用屏幕方向限定符land \ portrait
? 使用具體布局限定符,如layout-800x480
? 使用自動拉伸位圖(.9.png圖片)
“點(diǎn)九”是andriod平臺的應(yīng)用軟件開發(fā)里的一種特殊的圖片形式,文件擴(kuò)展名為:.9.png。
智能手機(jī)中有自動橫屏的功能,
,在界面改變方向后,界面上的圖形會因?yàn)殚L寬的變化而產(chǎn)生拉伸,造成圖形的失真變形。另外Android平臺有多種不同的分辨率,很多控件的切圖文件在被放大拉伸后,邊角會模糊失真。
在Android平臺下使用點(diǎn)九PNG技術(shù),可以將圖片橫向和縱向同時進(jìn)行拉伸,以實(shí)現(xiàn)在多分辨率下的完美顯示效果?!包c(diǎn)九”的制作方法,使用
“draw9patch”工具繪制,打開SDK/tools目錄下的“draw9patch.bat”文件。
2、 版本適配
盡量使用能適應(yīng)v4等這樣向下兼容的包
3、 語言自適應(yīng)
多語言目錄:
values-en 英文
values-zh 中文
values-zh-rCN 簡體中文
values-zh-rTW 繁體中文
values-ja 日文
本文出自微信公眾號mjw-java,更多內(nèi)容關(guān)注微信公眾號或訪問www.moliying.com