Android屏幕適配技巧

隨著Android智能的不斷飛躍,Android設(shè)備的種類也在不斷增長中,再加上各大廠商訂制的不同款型,造成了屏幕尺寸也是多種多樣,這樣就對程序員造成了一個(gè)非常直觀的問題,屏幕適配。所謂屏幕適配就是一款A(yù)PP在不同尺寸的屏幕上都能正常顯示,再直白點(diǎn)說,就是顯示出來是一個(gè)效果。

目前主流的分辨率提取出前六種:

1280×720、1920×1080、800×480、854×480、960×540、1184×720

如果你作為一個(gè)開發(fā)人員,那么起碼的幾個(gè)放置圖片的文件夾mdpi、hdpi、xdpi、xxdpi、xxxdpi就不怎么陌生了,那么什么是mdpi、hdpi、xdpi、xxdpi、xxxdpi?

名稱 ? ? ? ? ?像素密度范圍 ? ? ? ? 圖片大小

mdpi ? ? ? ? 120dp~160dp ? ? ? ? ? ? 48×48px

hdpi ? ? ? ? ?160dp~240dp ? ? ? ? ? ? 72×72px

xhdpi ? ? ? ?240dp~320dp ? ? ? ? ? ? 96×96px

xxhdpi ? ? ?320dp~480dp ? ? ? ? ? ? 144×144px

xxxhdpi ? ?480dp~640dp ? ? ? ? ? ? 192×192px

在Google官方開發(fā)文檔中,說明了 mdpi:hdpi:xhdpi:xxhdpi:xxxhdpi=2:3:4:6:8 的尺寸比例進(jìn)行縮放。例如,一個(gè)圖標(biāo)的大小為48×48dp,表示在mdpi上,實(shí)際大小為48×48px,在hdpi像素密度上,實(shí)際尺寸為mdpi上的1.5倍,即72×72px,以此類推。

簡單理解了之后咱們來實(shí)際學(xué)習(xí)一下如何進(jìn)行屏幕適配

1. 使用wrap_content、math_parent、weight

wrap_content:根據(jù)控件的內(nèi)容設(shè)置控件的尺寸

math_parent:根據(jù)父控件的尺寸大小設(shè)置控件的尺寸

weight:權(quán)重,在線性布局中可以使用weight屬性設(shè)置控件所占的比例(一般情況,我們都是設(shè)置要進(jìn)行比例分配的方向的寬度或者高度為0dp,然后再用權(quán)重進(jìn)行分配)

2. 使用相對布局,禁用絕對布局

簡單的布局一般都使用線性布局,而略微復(fù)雜點(diǎn)的布局,我們使用相對布局,大多數(shù)時(shí)候,我們都是使用這兩種布局的嵌套。

我們使用相對布局的原因是,相對布局能在各種尺寸的屏幕上保持控件間的相對位置。

3. 使用限定符

使用尺寸限定符

當(dāng)我們要在大屏幕上顯示不同的布局,就要使用large限定符。例如,在寬的屏幕左邊顯示列表右邊顯示列表項(xiàng)的詳細(xì)信息,在一般寬度的屏幕只顯示列表,不顯示列表項(xiàng)的詳細(xì)信息,我們就可以使用large限定符。

res/layout/main.xml 單面板:

res/layout-large/main.xml 雙面板:

如果這個(gè)程序運(yùn)行在屏幕尺寸大于7inch的設(shè)備上,系統(tǒng)就會(huì)加載res/layout-large/main.xml 而不是res/layout/main.xml,在小于7inch的設(shè)備上就會(huì)加載res/layout/main.xml。

需要注意的是,這種通過large限定符分辨屏幕尺寸的方法,適用于android3.2之前。在android3.2之后,為了更精確地分辨屏幕尺寸大小,Google推出了最小寬度限定符。

使用最小寬度限定符

最小寬度限定符的使用和large基本一致,只是使用了具體的寬度限定。

res/layout/main.xml,單面板(默認(rèn))布局:

res/layout-sw600dp/main.xml,雙面板布局: Small Width 最小寬度

這種方式是不區(qū)分屏幕方向的。這種最小寬度限定符適用于android3.2之后,所以如果要適配android全部的版本,就要使用large限定符和sw600dp文件同時(shí)存在于項(xiàng)目res目錄下。

這就要求我們維護(hù)兩個(gè)相同功能的文件。為了避免繁瑣操作,我們就要使用布局別名。

使用布局別名

res/layout/main.xml: 單面板布局

res/layout-large/main.xml: 多面板布局

res/layout-sw600dp/main.xml: 多面板布局

由于后兩個(gè)文具文件一樣,我們可以用以下兩個(gè)文件代替上面三個(gè)布局文件:

res/layout/main.xml 單面板布局

res/layout/main_twopanes.xml 雙面板布局

然后在res下建立

res/values/layout.xml、

res/values-large/layout.xml、

res/values-sw600dp/layout.xml三個(gè)文件。

默認(rèn)布局

res/values/layout.xml:

@layout/main

Android3.2之前的平板布局

res/values-large/layout.xml:

@layout/main_twopanes

Android3.2之后的平板布局

res/values-sw600dp/layout.xml:

@layout/main_twopanes

這樣就有了main為別名的布局。

在activity中setContentView(R.layout.main);

這樣,程序在運(yùn)行時(shí),就會(huì)檢測手機(jī)的屏幕大小,如果是平板設(shè)備就會(huì)加載res/layout/main_twopanes.xml,如果是手機(jī)設(shè)備,就會(huì)加載res/layout/main.xml 。我們就解決了只使用一個(gè)布局文件來適配android3.2前后的所有平板設(shè)備。

4. 使用自動(dòng)拉伸位圖

自動(dòng)拉伸位圖,即android下特有的.9.png圖片格式。

當(dāng)我們需要使圖片在拉伸后還能保持一定的顯示效果,比如,不能使圖片中的重要像素拉伸,不能使內(nèi)容區(qū)域受到拉伸的影響,我們就可以使用.9.png圖來實(shí)現(xiàn)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容