一、相關(guān)概念
屏幕尺寸
屏幕對(duì)角線的長度赐纱,單位英寸(inch)糊肤,1 inch=2.54 cm
屏幕分辨率
手機(jī)在橫向、縱向上的像素點(diǎn)數(shù)總和啰扛,單位像素(pixel)
屏幕像素密度
每英寸的像素點(diǎn)數(shù)嚎京,單位 dpi(dot per inch)
Android 手機(jī)根據(jù)屏幕像素密度分成六個(gè)級(jí)別:
- ldpi(低密度)<= 120dpi
- mdpi(中密度) <= 160dpi
- hdpi(高密度) <= 240dpi
- xhdpi(超高密度) <= 320dpi
- xxdhpi(超超高密度)<= 480dpi
- xxxhdpi (超超超高密度)<= 640dpi
密度無關(guān)像素
density-independent pixel,dp 或 dip隐解,與終端上的實(shí)際物理像素點(diǎn)無關(guān)鞍帝。
UI 設(shè)計(jì)師的設(shè)計(jì)圖是以 px 為單位的,而 Android 開發(fā)是以 dp 為單位的煞茫,所以 px 要和 dp 進(jìn)行轉(zhuǎn)換帕涌,在 Android 中摄凡,以160dpi 的屏幕像素密度為基準(zhǔn)
- 120dpi : 1dp = 0.75px
- 160dpi : 1dp = 1px
- 240dpi : 1dp = 1.5px
- 320dpi : 1dp = 2px
- 480dpi : 1dp = 3px
- 640dpi : 1dp = 4px
獨(dú)立比例像素
scale-independent pixel,sp或sip蚓曼。開發(fā)時(shí)用此單位設(shè)置文字大小亲澡,可根據(jù)字體大小首選項(xiàng)進(jìn)行縮放。推薦使用12sp纫版、14sp床绪、18sp、22sp作為字體設(shè)置的大小其弊,不推薦使用奇數(shù)和小數(shù)癞己,容易造成精度的丟失問題;小于12sp的字體會(huì)太小導(dǎo)致用戶看不清
二瑞凑、圖片適配
Android 圖片加載機(jī)制:在 res 目錄下面有一系列以屏幕像素密度作后綴的 drawable 文件夾末秃,系統(tǒng)在加載 res/drawable 文件夾下的圖片時(shí)首先會(huì)根據(jù)設(shè)備的屏幕像素密度到對(duì)應(yīng)的 drawable 文件夾去尋找圖片,找不到會(huì)到屏幕像素密度高一級(jí)的 drawable 文件夾去尋找籽御,直至最高級(jí)別的 drawable 文件夾還沒有找到的話练慕,再到比設(shè)備屏幕像素密度低的文件夾去尋找圖片。找到圖片后技掏,會(huì)根據(jù)設(shè)備屏幕像素密度和 drawable 文件夾的屏幕像素密度的比例對(duì)圖片進(jìn)行縮放铃将。
- 所以,我們只需要準(zhǔn)備一套分辨率規(guī)格的圖片哑梳,根據(jù)現(xiàn)在 Android 設(shè)備主流屏幕像素密度劲阎,最好選擇 drawable-xhdpi 文件夾;
- 使用自動(dòng)拉伸位圖 鸠真,.9圖是一種特殊的 PNG 圖片悯仙,左上邊規(guī)定了圖片的拉伸區(qū)域,右下邊規(guī)定了圖片的 padding box吠卷,也即內(nèi)容與背景圖邊緣的 padding锡垄;
- 通過 ImageView 的 ScaleType 來控制圖片的顯示;
三祭隔、布局適配
- 使用相對(duì)布局 RelativeLayout货岭,禁用絕對(duì)布局 AbsoluteLayout;
- 使用線性布局 LinearLayout 時(shí)疾渴,使用
android:layout_weight
屬性控制子 View 所占權(quán)重千贯; - 使用限定符,程序在運(yùn)行時(shí)根據(jù)當(dāng)前設(shè)備的配置(屏幕尺寸)自動(dòng)加載合適的布局資源
-
尺寸限定符
在 res 目錄下創(chuàng)建帶后綴的 layout 目錄搞坝,比如 layout-large搔谴,layout-xlarge 等, 大于7寸的平板設(shè)備會(huì)自動(dòng)加載 layout-large 目錄下的布局文件桩撮,大于 10寸的平板設(shè)備會(huì)自動(dòng)加載 layout-xlarge 目錄下的布局文件己沛,小屏幕設(shè)備則默認(rèn)加載 layout 目錄下的布局慌核,這種方式只適用于 Android3.2版本之前;
-
最小寬度限定符
通過指定某個(gè)最小寬度(以 dp 為單位)來精確定位屏幕從而加載不同的 UI 資源申尼。
該方式和尺寸限定符一樣垮卓,都是在 res 目錄下創(chuàng)建帶后綴名的 layout 文件夾,后綴格式為 -swXXXdp师幕,只要寬度或者高度大于 XXXdp粟按,就加載該目錄下的布局文件。
-
布局別名
該方式并不需要新建 layout 目錄霹粥,而是在 layout 目錄創(chuàng)建多個(gè) layout 文件
然后使用限定符創(chuàng)建多個(gè) values 目錄灭将,比如 values-large,values-swXXXdp后控,在 values 目錄下創(chuàng)建 layout.xml 文件庙曙,在 layout.xml 中聲明同一個(gè)布局的不同名稱的布局文件
比如在 res/values/layout.xml 文件中這樣聲明:
<resources>
<item name="main" type="layout">@layout/main_twopanes</item>
</resources>
那么在高度或?qū)挾却笥?00dp 的設(shè)備上加載名稱為 main 的布局文件時(shí)就會(huì)加載名稱為 main_twopanes 的布局文件
- 屏幕方向(Orientation)限定符
使用布局別名來實(shí)現(xiàn)屏幕方向,屏幕橫向的限定符為 land浩淘,屏幕縱向的限定符為 port
上面 layout 目錄和 values 目錄的后綴也可以是屏幕分辨率捌朴,加載 layout 或者 values 的時(shí)候不同于加載 drawable,系統(tǒng)會(huì)首先在設(shè)備分辨率對(duì)應(yīng)的目錄下尋找张抄,如果沒有找到砂蔽,則到低于設(shè)備分辨率的目錄中尋找,而不會(huì)到高于設(shè)備分辨率的目錄下去找署惯,如果沒有找到左驾,則到?jīng)]有后綴名的默認(rèn)目錄下尋找,還沒有找到會(huì)報(bào)錯(cuò)
- 使用 dp 作為尺寸單位极谊,其實(shí)如果設(shè)備的密度無關(guān)像素尺寸不同的話诡右,在不同設(shè)備上顯示也會(huì)有差別,可以在不同的 res/values/dimens.xml 文件中聲明不同的 dp 值轻猖;
- 使用百分比布局