應(yīng)用在運(yùn)行是,在運(yùn)行時(shí)秫舌,Android系統(tǒng)會(huì)根據(jù)當(dāng)前的設(shè)備設(shè)置自動(dòng)尋找合適的資源。為不同的設(shè)備提供不同的資源绣檬,主要是利用特殊命名的資源文件夾來(lái)實(shí)現(xiàn)的足陨。
一、資源文件命名
對(duì)于一個(gè)資源文件娇未,針對(duì)設(shè)備的不同墨缘,需要提供一整套的資源文件供程序運(yùn)行時(shí)根據(jù)設(shè)備和運(yùn)行條件(橫屏或者豎屏、移動(dòng)還是聯(lián)通)的不同來(lái)選擇合適的資源文件零抬。資源文件必須名稱(chēng)相同地放置到合適的資源文件夾下面镊讼,而資源文件夾的命名至關(guān)重要。
Android工程res目錄下資源文件的命名格式:
資源名-屬性1-屬性2-屬性3-屬性4
資源名的取值有:drawable, values, layout, anim, raw, menu, color, animator等各屬性的位置順序必須遵守優(yōu)先級(jí)從高到低排列平夜,否則編譯不過(guò)蝶棋。
以資源文件values為例,各屬性按優(yōu)先級(jí)從高到低的排序?yàn)椋?br> values-mcc310-en-sw320dp-w720dp-h720dp-large-long-port-car-night-ldpi-notouch-keysexposed-nokeys-navexposed-nonav-v7;
屬性說(shuō)明:
values-mcc310(sim卡運(yùn)營(yíng)商)-en(語(yǔ)言)-sw320dp(屏幕最小寬度)-w720dp(屏幕最佳寬度)-h720dp(屏幕最佳高度)-large(屏幕尺寸)-long(屏幕長(zhǎng)短邊模式)-port(當(dāng)前屏幕橫豎屏顯示模式)-car(dock模式)-night(白天或夜晚)-ldpi(屏幕最佳dpi)-notouch(觸摸屏模類(lèi)型)-keysexposed(鍵盤(pán)類(lèi)型)-nokey(硬按鍵類(lèi)型)-navexposed(方向鍵是否可用)-nonav(方向鍵類(lèi)型)-v7(android版本)
注意:
1)屏幕的像素密度修飾符忽妒,'依據(jù)Android會(huì)選擇最接近屏幕像素密度的一個(gè)文件'玩裙,不會(huì)因?yàn)榕c設(shè)備配置不一樣而被排除掉,
即使我們的設(shè)備現(xiàn)在是hdpi锰扶,但是drawable-port-ldpi/也不會(huì)因?yàn)橄薅ǚ脑虮慌懦仔铮驗(yàn)樵谶@個(gè)階段,所有的
屏幕密度都被考慮進(jìn)行適配通常來(lái)說(shuō)坷牛,Android更傾向于縮小一個(gè)比較大的圖片而不是放大一個(gè)比較小的圖片罕偎。
![圖片.png](http://upload-images.jianshu.io/upload_images/2588358-0b932b225a82c04a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
2)根據(jù)屏幕尺寸(small, large等(已被淘汰))限定符選擇資源時(shí),依據(jù)'向下匹配原則'如果沒(méi)有更好的匹配資源京闰,
則系統(tǒng)將使用專(zhuān)為小于當(dāng)前屏幕的屏幕而設(shè)計(jì)的資源(例如颜及,如有必要甩苛,大尺寸屏幕將使用標(biāo)準(zhǔn)尺寸的屏幕資源)。
但是俏站,如果唯一可用的資源大于當(dāng)前屏幕讯蒲,則系統(tǒng)不會(huì)使用這些資源,并且如果沒(méi)有其他資源與設(shè)備配置匹配肄扎,
應(yīng)用將會(huì)崩潰(例如墨林,如果所有布局資源均用 xlarge 限定符標(biāo)記,但設(shè)備是標(biāo)準(zhǔn)尺寸的屏幕)
二犯祠、drawable 與mipmap的區(qū)別
引入mipmap的原因:在apk應(yīng)用于手機(jī)時(shí)旭等,系統(tǒng)會(huì)去選擇對(duì)應(yīng)的資源目錄,有時(shí)啟動(dòng)圖標(biāo)ic_launcher會(huì)不合適衡载,但是其他的資源目錄已經(jīng)被過(guò)濾掉了搔耕,這樣導(dǎo)致了在手機(jī)顯示上,啟動(dòng)圖標(biāo)不正確的現(xiàn)象痰娱。而mipmap可以保留著一個(gè)ic_launcher弃榨,而且也僅僅需要一個(gè)分辨率的icon,自動(dòng)會(huì)縮放成其他分辨率的ic_launcher
將所有啟動(dòng)器圖標(biāo)放在 res/mipmap-[density]/ 文件夾中梨睁,而非 res/drawable-[density]/ 文件夾中鲸睛。無(wú)論安裝應(yīng)用的設(shè)備屏幕分辨率如何,Android 系統(tǒng)都會(huì)將資源保留在這些密度特定的文件夾中而姐,例如 mipmap-xxxhdpi腊凶。此 行為可讓啟動(dòng)器應(yīng)用為您的應(yīng)用選擇要顯示在主 屏幕上的最佳分辨率圖標(biāo)划咐。