分享磨礪營馬劍威老師講解-Android機(jī)型適配

一? 機(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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容