一? 機型適配介紹
1耳高、 Android中機型適配出現(xiàn)的原因
由于Android系統(tǒng)的開放性癞蚕,任何用戶、開發(fā)者著蛙、OEM廠商删铃、運營商都可以對Android進行定制,修改成他們想要的樣子踏堡。結果導致Android設備出現(xiàn)大量的"碎片化"的現(xiàn)象猎唁。
碎片化具體更多的表現(xiàn)在系統(tǒng)碎片和屏幕碎片兩個方面。下圖中顷蟆,每一個矩形就代表了一種Android設備诫隅。
2腐魂、 機型適配的思路
6個主流分辨率:800*480、480*320逐纬、1280*720蛔屹、854*480、960*540豁生、1920*1080
適配的基本思路是用通用的代碼盡可能適配更多的機型兔毒,特殊機型特殊處理。機型適配主要包括三個方面的適配:屏幕適配甸箱、版本適配和語言適配眼刃。
二 屏幕相關概念
1、 屏幕尺寸摇肌、屏幕分辨率、屏幕像素密度
屏幕尺寸:指屏幕的對角線的長度仪际,單位是英寸围小,1英寸=2.54厘米
屏幕分辨率:指在橫縱向上的像素點數(shù),單位是px树碱,1px=1個像素點
屏幕像素密度是:指每英寸上的像素點數(shù)肯适,單位是dpi,即“dot per inch”的縮寫成榜。
2框舔、 獲得屏幕分辨率和密度
DisplayMetrics 類提供了關于顯示的通用信息的方法,如顯示大小赎婚,分辨率等刘绣。
? 獲得屏幕分辨率和密度
? dp轉px
? px轉dp
? 獲得系統(tǒng)狀態(tài)欄高度
3、 dp\dip挣输、sp纬凤、px
px:像素。比如UI設計撩嚼、Android原生API都會以px作為統(tǒng)一的計量單位停士,像是獲取屏幕寬高等。
dip/dp:ensity Independent
Pixels的縮寫完丽,即密度-無關像素恋技。在Android中,規(guī)定以160dpi為基準逻族,1dip=1px蜻底,如果密度是320dpi,則1dip=2px聘鳞,以此類推朱躺。寫布局的時候要盡量使用dp而不是px刁赖。
sp:scale-independent pixels,與dp類似长搀,但是可以根據(jù)文字大小首選項進行放縮宇弛,是設置字體大小的御用單位。
4源请、 mdpi枪芒、hdpi、xhdpi谁尸、xxhdpi
mdpi舅踪、hdpi、xhdpi良蛮、xxhdpi抽碌、xxxhdpi用來修飾Android中的drawable文件夾及values文件夾,用來區(qū)分不同像素密度下的圖片和dimen值决瞳。
其實之前還有個ldpi货徙,但是隨著移動設備配置的不斷升級,這個像素密度的設備已經(jīng)很罕見了皮胡,所在現(xiàn)在適配時不需考慮痴颊。
nodpi,這個限定被用于不想根據(jù)匹配的設備分辨率進行縮放的位圖資源屡贺。
tvdpi蠢棱,在mdpi和hdpi之間的屏幕,大約是213dpi甩栈。大多數(shù)是為電視來考慮的泻仙。
級別 屏幕密度 dpi 屏幕比率 通常分辨率 px 圖標大小 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
三 機型適配的解決方案
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以前,所有的資源文件都有相應的xhdpi,hdpi,mdpi,ldpi四種文件來對應妓蛮,android3.2以后怠李,為了提供更精準的對布局文件的控制,可以通過為資源文件(res目錄下文件)增加后綴來指定該文件夾里的xml布局文件或color.xml,string.xml是為哪種大小的屏幕使用捺癞。
第一種后綴:swdp,如layout-sw600dp, values-sw600dp smallwidth
這里的sw代表smallwidth的意思夷蚊,當你所有屏幕的最小寬度都大于600dp時,屏幕就會自動到帶sw600dp后綴的資源文件里去尋找相關資源文件,這里的最小寬度是指屏幕寬高的較小值髓介,每個屏幕都是固定的惕鼓,不會隨著屏幕橫向縱向改變而改變。
第二種后綴wdp 如layout-w600dp, values-w600dp
帶這樣后綴的資源文件的資源文件制定了屏幕寬度的大于Ndp的情況下使用該資源文件唐础,但它和swdp不同的是箱歧,當屏幕橫向縱向切換時,屏幕的寬度是變化的一膨,以變化后的寬度來與N相比呀邢,看是否使用此資源文件下的資源。
第三種后綴hdp 如layout-h600dp, values-h600dp
這個后綴的使用方式和wdp一樣豹绪,隨著屏幕橫縱向的變化价淌,屏幕高度也會變化,根據(jù)變化后的高度值來判斷是否使用hdp
瞒津,因為屏幕在縱向上通常能夠滾動導致長度變化蝉衣,不像寬度那樣基本固定,google官方文檔建議盡量少使用這種方式仲智。
? 使用屏幕方向限定符land \ portrait
? 使用具體布局限定符,如layout-800x480
? 使用自動拉伸位圖(.9.png圖片)
“點九”是andriod平臺的應用軟件開發(fā)里的一種特殊的圖片形式姻氨,文件擴展名為:.9.png钓辆。
智能手機中有自動橫屏的功能,
,在界面改變方向后,界面上的圖形會因為長寬的變化而產(chǎn)生拉伸,造成圖形的失真變形。另外Android平臺有多種不同的分辨率肴焊,很多控件的切圖文件在被放大拉伸后前联,邊角會模糊失真。
在Android平臺下使用點九PNG技術娶眷,可以將圖片橫向和縱向同時進行拉伸似嗤,以實現(xiàn)在多分辨率下的完美顯示效果〗斐瑁“點九”的制作方法烁落,使用
“draw9patch”工具繪制,打開SDK/tools目錄下的“draw9patch.bat”文件豌注。
2伤塌、 版本適配
盡量使用能適應v4等這樣向下兼容的包
3、 語言自適應
多語言目錄:
values-en 英文
values-zh 中文
values-zh-rCN 簡體中文
values-zh-rTW 繁體中文
values-ja 日文
本文出自微信公眾號mjw-java轧铁,更多內(nèi)容關注微信公眾號或訪問www.moliying.com