幾組概念
分辨率
屏幕上物理像素的總數(shù)箭昵。添加對(duì)多種屏幕的支持時(shí)狭姨, 應(yīng)用不會(huì)直接使用分辨率拨拓;而只應(yīng)關(guān)注通用尺寸和密度組指定的屏幕尺寸及密度。
屏幕尺寸: 按屏幕對(duì)角測(cè)量的實(shí)際物理尺寸服猪。目前市面上說(shuō)的幾英寸是對(duì)角線(xiàn)的英寸數(shù)
為簡(jiǎn)便起見(jiàn)供填,Android 將所有實(shí)際屏幕尺寸分組為四種通用尺寸:小拐云、 正常、大和超大近她。(太寬泛了, 現(xiàn)在已不建議使用)
DPI(Dots Per Inch):每英寸點(diǎn)數(shù)叉瘩,表示指屏幕密度。是測(cè)量空間點(diǎn)密度的單位粘捎,最初應(yīng)用于打印技術(shù)中薇缅,它表示每英寸能打印上的墨滴數(shù)量。較小的 DPI 會(huì)產(chǎn)生不清晰的圖片攒磨。
后來(lái)DPI的概念也被應(yīng)用到了計(jì)算機(jī)屏幕上泳桦,計(jì)算機(jī)屏幕一般采用 PPI(Pixels Per Inch)來(lái)表示一英寸屏幕上顯示的像素點(diǎn)的數(shù)量,現(xiàn)在 DPI 也被引入娩缰。
為簡(jiǎn)便起見(jiàn)灸撰,Android 將所有屏幕密度分組為六種通用密度
屏幕像素密度 | ldpi |
mdpi |
hdpi |
xhdpi |
xxhdpi |
xxxhdpi |
---|---|---|---|---|---|---|
描述 | 低密度屏幕 | 中等密度 | 高密度屏幕 | 超高密度屏幕 | - | - |
約為 | ~120dpi | ~160dpi | ~240dpi | ~320dpi | ~480dpi | ~640dpi |
之間的縮放比 | 3 | 4 | 6 | 8 | 12 | 16 |
? | 0.75x | 1.0x | 1.5x | 2.0x | 3.0x | 4.0x |
PPI(Pixels Per Inch):圖像分辨率;是每英寸圖像內(nèi)有多少個(gè)像素點(diǎn)拼坎,分辨率的單位為ppi浮毯,通常叫做像素每英寸。圖像分辨率一般被用于ps中泰鸡,用來(lái)改變圖像的清晰度债蓝。
密度無(wú)關(guān)像素 (dp)
在定義 UI 布局時(shí)應(yīng)使用的虛擬像素單位,用于以密度無(wú)關(guān)方式表示布局維度或位置盛龄。
密度無(wú)關(guān)像素等于 160 dpi 屏幕上的一個(gè)物理像素饰迹,這是 系統(tǒng)為“中”密度屏幕假設(shè)的基線(xiàn)密度。在運(yùn)行時(shí)讯嫂,系統(tǒng) 根據(jù)使用中屏幕的實(shí)際密度按需要以透明方式處理 dp 單位的任何縮放 蹦锋。dp 單位轉(zhuǎn)換為屏幕像素很簡(jiǎn)單: px = dp * (dpi / 160)
。
例如欧芽,在 240 dpi 屏幕上,1 dp 等于 1.5 物理像素葛圃。在定義應(yīng)用的 UI 時(shí)應(yīng)始終使用 dp 單位 千扔,以確保在不同密度的屏幕上正常顯示 UI。
適配方案
密度獨(dú)立性
應(yīng)用顯示在密度不同的屏幕上時(shí)库正,如果它保持用戶(hù)界面元素的物理尺寸(從 用戶(hù)的視角)曲楚,便可實(shí)現(xiàn)“密度獨(dú)立性” 。
Android 系統(tǒng)可幫助您的應(yīng)用以?xún)煞N方式實(shí)現(xiàn)密度獨(dú)立性:
- 系統(tǒng)根據(jù)當(dāng)前屏幕密度擴(kuò)展 dp 單位數(shù)
- 系統(tǒng)在必要時(shí)可根據(jù)當(dāng)前屏幕密度將可繪制對(duì)象資源擴(kuò)展到適當(dāng)?shù)拇笮?
-
nodpi
:它可用于您不希望縮放以匹配設(shè)備密度的位圖資源褥符。例如.9圖推薦放在此目錄 -
anydpi
:此限定符適合所有屏幕密度龙誊,其優(yōu)先級(jí)高于其他限定符。 這對(duì)于矢量可繪制對(duì)象很有用喷楣。 此項(xiàng)為 API 級(jí)別 21 中新增配置
-
最佳做法
- 使用新尺寸限定符
smallestWidth (sw<N>dp)
屏幕的基本尺寸趟大,由可用屏幕區(qū)域的最小尺寸指定鹤树。 具體來(lái)說(shuō),設(shè)備的smallestWidth 是屏幕可用高度和寬度的最小尺寸(您也可以將其視為屏幕的“最小可能寬度”)逊朽。無(wú)論屏幕的當(dāng)前方向如何罕伯,您均可使用此限定符確保應(yīng)用 UI 的可用寬度至少為 <N>dp。
例如叽讳,如果布局要求屏幕區(qū)域的最小尺寸始終至少為 600 dp,則可使用此限定符創(chuàng)建布局資源 res/layout-sw600dp/。僅當(dāng)可用屏幕的最小尺寸至少為 600dp 時(shí)荔棉,系統(tǒng)才會(huì)使用這些資源到涂,而不考慮 600dp 所代表的邊是用戶(hù)所認(rèn)為的高度還是寬度。smallestWidth 是設(shè)備的固定屏幕尺寸特性涤妒;設(shè)備的 smallestWidth 不會(huì)隨屏幕方向的變化而改變推溃。
設(shè)備的 smallestWidth 將屏幕裝飾元素和系統(tǒng) UI 考慮在內(nèi)。例如届腐,如果設(shè)備的屏幕上有一些永久性 UI 元素占據(jù)沿 smallestWidth 軸的空間铁坎,則系統(tǒng)會(huì)聲明 smallestWidth 小于實(shí)際屏幕尺寸,因?yàn)檫@些屏幕像素不適用于您的 UI犁苏。
這可替代通用化的屏幕尺寸限定符(小硬萍、正常、大围详、超大)朴乖, 可讓您為 UI 可用的有效尺寸定義不連續(xù)的數(shù)值。 使用 smallestWidth 定義一般屏幕尺寸很有用助赞,因?yàn)閷挾?通常是設(shè)計(jì)布局時(shí)的驅(qū)動(dòng)因素买羞。UI 經(jīng)常會(huì)垂直滾動(dòng),但 對(duì)其水平需要的最小空間具有非常硬性的限制雹食⌒笃眨可用的寬度也是 確定是否對(duì)手機(jī)使用單窗格布局或是對(duì)平板電腦使用多窗格布局的關(guān)鍵因素。因此群叶,您可能最關(guān)注每部 設(shè)備上的最小可能寬度吃挑。
最小寬度限定符可讓您通過(guò)指定某個(gè)最小寬度(以 dp 為單位)來(lái)定位屏幕。例如街立,標(biāo)準(zhǔn) 7 英寸平板電腦的最小寬度為 600 dp舶衬,因此如果您要在此類(lèi)屏幕上的用戶(hù)界面中使用雙面板(但在較小的屏幕上只顯示列表),您可以使用上文中所述的單面板和雙面板這兩種布局赎离,但您應(yīng)使用 sw600dp 指明雙面板布局僅適用于最小寬度為 600 dp 的屏幕逛犹,而不是使用 large 尺寸限定符。
- 在 XML 布局文件中指定尺寸時(shí)使用 wrap_content、match_parent 或 dp 單位 虽画。
- 不要在應(yīng)用代碼中使用硬編碼的像素值
- 不要使用 AbsoluteLayout(已棄用), 而是考慮線(xiàn)性布局使用權(quán)重分配寬高, support庫(kù)中約束布局, 可以是布局更加扁平化
- 為不同屏幕密度提供替代位圖可繪制對(duì)象
圖標(biāo)的適配
在進(jìn)行開(kāi)發(fā)的時(shí)候舞蔽,我們需要把合適大小的圖片放在合適的文件夾里面。下面以圖標(biāo)設(shè)計(jì)為例進(jìn)行介紹狸捕。
在設(shè)計(jì)圖標(biāo)時(shí)喷鸽,對(duì)于五種主流的像素密度(MDPI、HDPI灸拍、XHDPI做祝、XXHDPI 和XXXHDPI)應(yīng)按照 2:3:4:6:8 的比例進(jìn)行縮放。
雖然 Android 也支持低像素密度 (LDPI) 的屏幕鸡岗,但無(wú)需為此費(fèi)神混槐,系統(tǒng)會(huì)自動(dòng)將 HDPI 尺寸的圖標(biāo)縮小到 1/2 進(jìn)行匹配。
建議以高分辨率作為設(shè)計(jì)大小轩性,然后按照倍數(shù)對(duì)應(yīng)縮小到小分辨率的圖片声登。
一般情況下,我們只需要提供3套切圖資源就可以滿(mǎn)足安卓工程師的適配揣苏,分別是 HDPI悯嗓、XHDPI、 XXHDPI 3套切圖資源卸察。
推薦使用的辦法就是只提供最大尺寸的切圖脯厨,xxhdpi 的高清圖, 然后可以交給安卓工程師自己去縮放適配其他分辨率。
.9圖自動(dòng)拉伸
ImageView的ScaleType屬性
設(shè)置 不同的 ScaleType 會(huì)得到不同的顯示效果坑质,一般情況下合武,設(shè)置為 centerCrop 能獲得較好的適配效果。fixXY 可能導(dǎo)致變形.
動(dòng)態(tài)設(shè)置
- 有一些情況下涡扼,我們需要?jiǎng)討B(tài)的設(shè)置控件大小或者是位置稼跳,比如說(shuō) popwindow 的顯示位置和偏移量等,這個(gè)時(shí)候我們可以動(dòng)態(tài)的獲取當(dāng)前的屏幕屬性吃沪,然后設(shè)置合適的數(shù)值
- 使用官方百分比布局
dependencies{
compile'com.android.support:percent:25.1.0'
}
使用布局別名
最小寬度限定符僅適用于 Android 3.2 及更高版本汤善。因此,如果我們?nèi)孕枋褂门c較低版本兼容的概括尺寸范圍(小巷波、正常萎津、大和特大)。例如抹镊,如果要將用戶(hù)界面設(shè)計(jì)成在手機(jī)上顯示單面板,但在 7 英寸平板電腦荤傲、電視和其他較大的設(shè)備上顯示多面板垮耳,那么我們就需要提供以下文件:
參考
- https://developer.android.google.cn/guide/practices/screens_support#density-independence
- http://blog.csdn.net/lfdfhl/article/details/52735103
- 一款A(yù)PP設(shè)計(jì)的從0到1之:Android設(shè)計(jì)規(guī)范篇-UI中國(guó)-專(zhuān)業(yè)用戶(hù)體驗(yàn)設(shè)計(jì)平臺(tái)
https://www.ui.cn/detail/281292.html