應(yīng)用在運(yùn)行是,在運(yùn)行時,Android系統(tǒng)會根據(jù)當(dāng)前的設(shè)備設(shè)置自動尋找合適的資源。為不同的設(shè)備提供不同的資源,主要是利用特殊命名的資源文件夾來實(shí)現(xiàn)的。
一、資源文件命名
對于一個資源文件,針對設(shè)備的不同,需要提供一整套的資源文件供程序運(yùn)行時根據(jù)設(shè)備和運(yùn)行條件(橫屏或者豎屏、移動還是聯(lián)通)的不同來選擇合適的資源文件。資源文件必須名稱相同地放置到合適的資源文件夾下面,而資源文件夾的命名至關(guān)重要。
Android工程res目錄下資源文件的命名格式:
資源名-屬性1-屬性2-屬性3-屬性4
資源名的取值有:drawable, values, layout, anim, raw, menu, color, animator等各屬性的位置順序必須遵守優(yōu)先級從高到低排列,否則編譯不過。
以資源文件values為例,各屬性按優(yōu)先級從高到低的排序?yàn)椋?br> values-mcc310-en-sw320dp-w720dp-h720dp-large-long-port-car-night-ldpi-notouch-keysexposed-nokeys-navexposed-nonav-v7;
屬性說明:
values-mcc310(sim卡運(yùn)營商)-en(語言)-sw320dp(屏幕最小寬度)-w720dp(屏幕最佳寬度)-h720dp(屏幕最佳高度)-large(屏幕尺寸)-long(屏幕長短邊模式)-port(當(dāng)前屏幕橫豎屏顯示模式)-car(dock模式)-night(白天或夜晚)-ldpi(屏幕最佳dpi)-notouch(觸摸屏模類型)-keysexposed(鍵盤類型)-nokey(硬按鍵類型)-navexposed(方向鍵是否可用)-nonav(方向鍵類型)-v7(android版本)
注意:
1)屏幕的像素密度修飾符,'依據(jù)Android會選擇最接近屏幕像素密度的一個文件',不會因?yàn)榕c設(shè)備配置不一樣而被排除掉,
即使我們的設(shè)備現(xiàn)在是hdpi,但是drawable-port-ldpi/也不會因?yàn)橄薅ǚ脑虮慌懦驗(yàn)樵谶@個階段,所有的
屏幕密度都被考慮進(jìn)行適配通常來說,Android更傾向于縮小一個比較大的圖片而不是放大一個比較小的圖片。

2)根據(jù)屏幕尺寸(small, large等(已被淘汰))限定符選擇資源時,依據(jù)'向下匹配原則'如果沒有更好的匹配資源,
則系統(tǒng)將使用專為小于當(dāng)前屏幕的屏幕而設(shè)計的資源(例如,如有必要,大尺寸屏幕將使用標(biāo)準(zhǔn)尺寸的屏幕資源)。
但是,如果唯一可用的資源大于當(dāng)前屏幕,則系統(tǒng)不會使用這些資源,并且如果沒有其他資源與設(shè)備配置匹配,
應(yīng)用將會崩潰(例如,如果所有布局資源均用 xlarge 限定符標(biāo)記,但設(shè)備是標(biāo)準(zhǔn)尺寸的屏幕)
二、drawable 與mipmap的區(qū)別
引入mipmap的原因:在apk應(yīng)用于手機(jī)時,系統(tǒng)會去選擇對應(yīng)的資源目錄,有時啟動圖標(biāo)ic_launcher會不合適,但是其他的資源目錄已經(jīng)被過濾掉了,這樣導(dǎo)致了在手機(jī)顯示上,啟動圖標(biāo)不正確的現(xiàn)象。而mipmap可以保留著一個ic_launcher,而且也僅僅需要一個分辨率的icon,自動會縮放成其他分辨率的ic_launcher
將所有啟動器圖標(biāo)放在 res/mipmap-[density]/ 文件夾中,而非 res/drawable-[density]/ 文件夾中。無論安裝應(yīng)用的設(shè)備屏幕分辨率如何,Android 系統(tǒng)都會將資源保留在這些密度特定的文件夾中,例如 mipmap-xxxhdpi。此 行為可讓啟動器應(yīng)用為您的應(yīng)用選擇要顯示在主 屏幕上的最佳分辨率圖標(biāo)。