https://developer.android.com/guide/topics/resources/providing-resources.html
提供備用資源配置限定符值說明
圖 1.兩種不同的設(shè)備,均使用不同的布局資源缩幸。
幾乎每個應(yīng)用都應(yīng)提供備用資源以支持特定的設(shè)備配置止喷。 例如,對于不同的屏幕密度和語言,您應(yīng)分別包括備用可繪制對象資源和備用字符串資源。 在運行時,Android 會檢測當(dāng)前設(shè)備配置并為應(yīng)用加載合適的資源殉疼。
為一組資源指定特定于配置的備用資源:
在res/中創(chuàng)建一個以-形式命名的新目錄。
是相應(yīng)默認(rèn)資源的目錄名稱(如表 1 中所定義)捌年。
是指定要使用這些資源的各個配置的名稱(如表 2 中所定義)瓢娜。
您可以追加多個。以短劃線將其分隔礼预。
注意:追加多個限定符時眠砾,必須按照表 2 中列出的相同順序放置它們。如果限定符的順序錯誤托酸,則該資源將被忽略褒颈。
將相應(yīng)的備用資源保存在此新目錄下。這些資源文件的名稱必須與默認(rèn)資源文件完全一樣励堡。
例如谷丸,以下是一些默認(rèn)資源和備用資源:
res/? ? drawable/icon.png
background.pngdrawable-hdpi/icon.png
background.png
hdpi限定符表示該目錄中的資源適用于屏幕密度較高的設(shè)備。其中每個可繪制對象目錄中的圖像已針對特定的屏幕密度調(diào)整大小念秧,但是文件名完全相同淤井。 這樣一來布疼,用于引用icon.png或background.png圖像的資源 ID 始終相同摊趾,但是 Android 會通過將設(shè)備配置信息與資源目錄名稱中的限定符進行比較币狠,選擇最符合當(dāng)前設(shè)備的各個資源版本。
Android 支持若干配置限定符砾层,您可以通過使用短劃線分隔每個限定符漩绵,向一個目錄名稱添加多個限定符。表 2 按優(yōu)先順序列出了有效的配置限定符肛炮;如果對資源目錄使用多個限定符止吐,則必須按照表中列出的順序?qū)⑺鼈兲砑拥侥夸浢Q。
表 2.配置限定符名稱侨糟。
MCC 和 MNC示例:
mcc310
mcc310-mnc004
mcc208-mnc00
等等移動國家代碼 (MCC)碍扔,(可選)后跟設(shè)備 SIM 卡中的移動網(wǎng)絡(luò)代碼 (MNC)。例如秕重,mcc310是指美國的任一運營商不同,mcc310-mnc004是指美國的 Verizon 公司,mcc208-mnc00是指法國的 Orange 公司溶耘。
如果設(shè)備使用無線電連接(GSM 手機)二拐,則 MCC 和 MNC 值來自 SIM 卡。
也可以單獨使用 MCC(例如凳兵,將國家/地區(qū)特定的合法資源包括在應(yīng)用中)百新。如果只需根據(jù)語言指定,則改用“語言和區(qū)域”限定符(稍后進行介紹)庐扫。 如果決定使用 MCC 和 MNC 限定符饭望,請謹(jǐn)慎執(zhí)行此操作并測試限定符是否按預(yù)期工作。
另請參閱配置字段mcc和mnc形庭,這兩個字段分別表示當(dāng)前的移動國家代碼和移動網(wǎng)絡(luò)代碼杰妓。
語言和區(qū)域示例:
en
fr
en-rUS
fr-rFR
fr-rCA
等等語言通過由兩個字母組成的ISO 639-1語言代碼定義,可以選擇后跟兩個字母組成的ISO 3166-1-alpha-2區(qū)域碼(前帶小寫字母“r”)碘勉。
這些代碼不區(qū)分大小寫巷挥;r前綴用于區(qū)分區(qū)域碼。不能單獨指定區(qū)域验靡。
如果用戶更改系統(tǒng)設(shè)置中的語言倍宾,它有可能在應(yīng)用生命周期中發(fā)生改變。 如需了解這會在運行期間給應(yīng)用帶來哪些影響胜嗓,請參閱處理運行時變更高职。
有關(guān)針對其他語言本地化應(yīng)用的完整指南,請參閱本地化辞州。
另請參閱locale配置字段怔锌,該字段表示當(dāng)前的語言區(qū)域。
布局方向ldrtl
ldltr
應(yīng)用的布局方向。ldrtl是指“布局方向從右到左”埃元。ldltr是指“布局方向從左到右”涝涤,這是默認(rèn)的隱式值。
它適用于布局岛杀、圖片或值等任何資源阔拳。
例如,若要針對阿拉伯語提供某種特定布局类嗤,并針對任何其他“從右到左”語言(如波斯語或希伯來語)提供某種通用布局糊肠,則可編碼如下:
res/? ? layout/main.xml(Default layout)? ? layout-ar/main.xml(Specific layout for Arabic)? ? layout-ldrtl/main.xml(Any "right-to-left" language, except? ? ? ? ? ? ? ? ? for Arabic, because the "ar" language qualifier? ? ? ? ? ? ? ? ? has a higher precedence.)
注:要為應(yīng)用啟用從右到左的布局功能,必須將supportsRtl設(shè)置為"true"遗锣,并將targetSdkVersion設(shè)置為 17 或更高版本货裹。
此項為 API 級別 17 中新增配置。
smallestWidthswdp
示例:
sw320dp
sw600dp
sw720dp
等等屏幕的基本尺寸精偿,由可用屏幕區(qū)域的最小尺寸指定泪酱。 具體來說,設(shè)備的 smallestWidth 是屏幕可用高度和寬度的最小尺寸(您也可以將其視為屏幕的“最小可能寬度”)还最。無論屏幕的當(dāng)前方向如何墓阀,您均可使用此限定符確保應(yīng)用 UI 的可用寬度至少為dp。
例如拓轻,如果布局要求屏幕區(qū)域的最小尺寸始終至少為 600dp斯撮,則可使用此限定符創(chuàng)建布局資源res/layout-sw600dp/。僅當(dāng)可用屏幕的最小尺寸至少為 600dp 時扶叉,系統(tǒng)才會使用這些資源勿锅,而不考慮 600dp 所代表的邊是用戶所認(rèn)為的高度還是寬度。smallestWidth 是設(shè)備的固定屏幕尺寸特性枣氧;設(shè)備的 smallestWidth 不會隨屏幕方向的變化而改變溢十。
設(shè)備的 smallestWidth 將屏幕裝飾元素和系統(tǒng) UI 考慮在內(nèi)。例如达吞,如果設(shè)備的屏幕上有一些永久性 UI 元素占據(jù)沿 smallestWidth 軸的空間张弛,則系統(tǒng)會聲明 smallestWidth 小于實際屏幕尺寸,因為這些屏幕像素不適用于您的 UI酪劫。 因此吞鸭,使用的值應(yīng)該是布局所需要的實際最小尺寸(通常,無論屏幕的當(dāng)前方向如何覆糟,此值都是布局支持的“最小寬度”)刻剥。
以下是一些可用于普通屏幕尺寸的值:
320,適用于屏幕配置如下的設(shè)備:
240x320 ldpi(QVGA 手機)
320x480 mdpi(手機)
480x800 hdpi(高密度手機)
480滩字,適用于 480x800 mdpi 之類的屏幕(平板電腦/手機)造虏。
600御吞,適用于 600x1024 mdpi 之類的屏幕(7 英寸平板電腦)。
720漓藕,適用于 720x1280 mdpi 之類的屏幕(10 英寸平板電腦)陶珠。
應(yīng)用為多個資源目錄提供不同的? smallestWidth 限定符值時,系統(tǒng)會使用最接近(但未超出)設(shè)備 smallestWidth 的值撵术。
此項為 API 級別 13 中新增配置背率。
另請參閱android:requiresSmallestWidthDp屬性和smallestScreenWidthDp配置字段话瞧,前者聲明與應(yīng)用兼容的最小 smallestWidth嫩与;后者存放設(shè)備的 smallestWidth 值。
如需了解有關(guān)設(shè)計不同屏幕和使用此限定符的詳細信息交排,請參閱支持多種屏幕開發(fā)者指南划滋。
可用寬度wdp
示例:
w720dp
w1024dp
等等指定資源應(yīng)該使用的最小可用屏幕寬度,以dp為單位埃篓,由值定義处坪。在橫向和縱向之間切換時,為了匹配當(dāng)前實際寬度架专,此配置值也會隨之發(fā)生變化同窘。
應(yīng)用為多個資源目錄提供不同的此配置值時,系統(tǒng)會使用最接近(但未超出)設(shè)備當(dāng)前屏幕寬度的值部脚。 此處的值考慮到了屏幕裝飾元素想邦,因此如果設(shè)備顯示屏的左邊緣或右邊緣上有一些永久性 UI 元素,考慮到這些 UI? 元素委刘,它會使用小于實際屏幕尺寸的寬度值丧没,這樣會減少應(yīng)用的可用空間。
此項為 API 級別 13 中新增配置锡移。
另請參閱screenWidthDp配置字段呕童,該字段存放當(dāng)前屏幕寬度。
如需了解有關(guān)設(shè)計不同屏幕和使用此限定符的詳細信息淆珊,請參閱支持多種屏幕開發(fā)者指南夺饲。
可用高度hdp
示例:
h720dp
h1024dp
等等指定資源應(yīng)該使用的最小可用屏幕高度,以“dp”為單位施符,由值定義钞支。 在橫向和縱向之間切換時,為了匹配當(dāng)前實際高度操刀,此配置值也會隨之發(fā)生變化烁挟。
應(yīng)用為多個資源目錄提供不同的此配置值時,系統(tǒng)會使用最接近(但未超出)設(shè)備當(dāng)前屏幕高度的值骨坑。 此處的值考慮到了屏幕裝飾元素撼嗓,因此如果設(shè)備顯示屏的上邊緣或下邊緣有一些永久性 UI 元素柬采,考慮到這些 UI? 元素,同時為減少應(yīng)用的可用空間且警,它會使用小于實際屏幕尺寸的高度值粉捻。 非固定的屏幕裝飾元素(例如,全屏?xí)r可隱藏的手機狀態(tài)欄)并不在考慮范圍內(nèi)斑芜,標(biāo)題欄或操作欄等窗口裝飾也不在考慮范圍內(nèi)肩刃,因此應(yīng)用必須準(zhǔn)備好處理稍小于其所指定值的空間。
此項為 API 級別 13 中新增配置杏头。
另請參閱screenHeightDp配置字段盈包,該字段存放當(dāng)前屏幕寬度。
如需了解有關(guān)設(shè)計不同屏幕和使用此限定符的詳細信息醇王,請參閱支持多種屏幕開發(fā)者指南呢燥。
屏幕尺寸small
normal
large
xlargesmall:尺寸類似于低密度 QVGA 屏幕的屏幕。小屏幕的最小布局尺寸約為 320x426 dp 單位寓娩。例如叛氨,QVGA 低密度屏幕和 VGA 高密度屏幕。
normal:尺寸類似于中等密度 HVGA 屏幕的屏幕棘伴。標(biāo)準(zhǔn)屏幕的最小布局尺寸約為 320x470 dp 單位寞埠。例如,WQVGA 低密度屏幕焊夸、HVGA 中等密度屏幕仁连、WVGA 高密度屏幕。
large:尺寸類似于中等密度 VGA 屏幕的屏幕淳地。? ? ? ? 大屏幕的最小布局尺寸約為 480x640 dp 單位怖糊。? ? ? ? 例如,VGA 和 WVGA 中等密度屏幕颇象。
xlarge:明顯大于傳統(tǒng)中等密度 HVGA 屏幕的屏幕伍伤。超大屏幕的最小布局尺寸約為 720x960 dp 單位。在大多數(shù)情況下遣钳,屏幕超大的設(shè)備體積過大扰魂,不能放進口袋,最常見的是平板式設(shè)備蕴茴。API 級別 9 中的新增配置劝评。
注:使用尺寸限定符并不表示資源僅適用于該尺寸的屏幕。 如果沒有為備用資源提供最符合當(dāng)前設(shè)備配置的限定符倦淀,則系統(tǒng)可能使用其中最匹配的資源蒋畜。
注意:如果所有資源均使用大于當(dāng)前屏幕的尺寸限定符,則系統(tǒng)不會使用這些資源撞叽,并且應(yīng)用在運行時將會崩潰(例如姻成,如果所有布局資源均用xlarge限定符標(biāo)記插龄,但設(shè)備是標(biāo)準(zhǔn)尺寸的屏幕)。
此項為 API 級別 4 中新增配置科展。
如需了解詳細信息均牢,請參閱支持多種屏幕。
另請參閱screenLayout配置字段才睹,該字段表示屏幕是小尺寸徘跪、標(biāo)準(zhǔn)尺寸還是大尺寸。
屏幕縱橫比long
notlonglong:寬屏琅攘,如 WQVGA垮庐、WVGA、FWVGA
notlong:非寬屏乎澄,如 QVGA突硝、HVGA 和 VGA
此項為 API 級別 4 中新增配置测摔。
它完全基于屏幕的縱橫比(寬屏較寬)置济,而與屏幕方向無關(guān)。
另請參閱screenLayout配置字段锋八,該字段指示屏幕是否為寬屏浙于。
圓形屏幕round
notroundround:圓形屏幕,例如圓形可穿戴式設(shè)備
notround:方形屏幕挟纱,例如手機或平板電腦
此項為 API 級別 23 中新增配置羞酗。
另請參閱isScreenRound()配置方法,其指示屏幕是否為寬屏紊服。
屏幕方向port
landport:設(shè)備處于縱向(垂直)
land:設(shè)備處于橫向(水平)
如果用戶旋轉(zhuǎn)屏幕檀轨,它有可能在應(yīng)用生命周期中發(fā)生改變。 如需了解這會在運行期間給應(yīng)用帶來哪些影響欺嗤,請參閱處理運行時變更参萄。
另請參閱orientation配置字段,該字段指示當(dāng)前的設(shè)備方向煎饼。
UI 模式car
desk
television
appliancewatchcar:設(shè)備正在車載手機座上顯示
desk:設(shè)備正在桌面手機座上顯示
television:設(shè)備正在電視上顯示讹挎,為用戶提供“十英尺”體驗,其 UI 位于遠離用戶的大屏幕上吆玖,主要面向方向鍵或其他非指針式交互
appliance:設(shè)備用作不帶顯示屏的裝置
watch:設(shè)備配有顯示屏筒溃,戴在手腕上
此項為 API 級別 8 中新增配置,API 13 中新增電視配置沾乘,API 20 中新增手表配置怜奖。
如需了解應(yīng)用在設(shè)備插入手機座或從中移除時的響應(yīng)方式,請閱讀確定并監(jiān)控插接狀態(tài)和類型翅阵。
如果用戶將設(shè)備放入手機座中歪玲,它有可能在應(yīng)用生命周期中發(fā)生改變尽爆。 可以使用UiModeManager啟用或禁用其中某些模式。如需了解這會在運行期間給應(yīng)用帶來哪些影響读慎,請參閱處理運行時變更漱贱。
夜間模式night
notnightnight:夜間
notnight:白天
此項為 API 級別 8 中新增配置。
如果夜間模式停留在自動模式(默認(rèn))夭委,它有可能在應(yīng)用生命周期中發(fā)生改變幅狮。在這種情況下,該模式會根據(jù)當(dāng)天的時間進行調(diào)整株灸。 可以使用UiModeManager啟用或禁用此模式崇摄。如需了解這會在運行期間給應(yīng)用帶來哪些影響,請參閱處理運行時變更慌烧。
屏幕像素密度 (dpi)ldpi
mdpi
hdpi
xhdpi
xxhdpi
xxxhdpi
nodpi
tvdpi
anydpildpi:低密度屏幕逐抑;約為 120dpi。
mdpi:中等密度(傳統(tǒng) HVGA)屏幕屹蚊;約為 160dpi厕氨。
hdpi:高密度屏幕;約為 240dpi汹粤。
xhdpi:超高密度屏幕命斧;約為 320dpi。此項為 API 級別 8 中新增配置
xxhdpi:超超高密度屏幕嘱兼;約為 480dpi国葬。此項為 API 級別 16 中新增配置
xxxhdpi:超超超高密度屏幕使用(僅限啟動器圖標(biāo),請參閱“支持多種屏幕”中的注釋)芹壕;約為 640dpi汇四。此項為 API 級別 18 中新增配置
nodpi:它可用于您不希望縮放以匹配設(shè)備密度的位圖資源。
tvdpi:密度介于 mdpi 和 hdpi 之間的屏幕踢涌;約為 213dpi通孽。它并不是“主要”密度組, 主要用于電視斯嚎,而大多數(shù)應(yīng)用都不需要它利虫。對于大多數(shù)應(yīng)用而言,提供 mdpi 和 hdpi 資源便已足夠堡僻,系統(tǒng)將根據(jù)需要對其進行縮放糠惫。此項為 API 級別 13 中新增配置
anydpi:此限定符適合所有屏幕密度,其優(yōu)先級高于其他限定符钉疫。 這對于矢量可繪制對象很有用硼讽。此項為 API 級別 21 中新增配置
六個主要密度之間的縮放比為 3:4:6:8:12:16(忽略 tvdpi 密度)。因此牲阁,9x9 (ldpi) 位圖相當(dāng)于 12x12 (mdpi)固阁、18x18 (hdpi)壤躲、24x24 (xhdpi) 位圖,依此類推备燃。
如果您認(rèn)為圖像資源在電視或其他某些設(shè)備上呈現(xiàn)的效果不夠好碉克,而想嘗試使用 tvdpi 資源,則縮放比例為 1.33*mdpi并齐。例如漏麦,mdpi 屏幕的 100px x 100px 圖像應(yīng)該相當(dāng)于 tvdpi 的133px x 133px。
注:使用密度限定符并不表示資源僅適用于該密度的屏幕况褪。如果沒有為備用資源提供最符合當(dāng)前設(shè)備配置的限定符撕贞,則系統(tǒng)可能使用其中最匹配的資源。
如需了解有關(guān)如何處理不同屏幕密度以及 Android 如何縮放位圖以適應(yīng)當(dāng)前密度的詳細信息测垛,請參閱支持多種屏幕捏膨。
觸摸屏類型notouch
fingernotouch:設(shè)備沒有觸摸屏。
finger:設(shè)備有一個專供用戶通過手指直接與其交互的觸摸屏食侮。
另請參閱touchscreen配置字段号涯,該字段指示設(shè)備上的觸摸屏類型。
鍵盤可用性keysexposed
keyshidden
keyssoftkeysexposed:設(shè)備具有可用的鍵盤疙描。如果設(shè)備啟用了軟鍵盤(不無可能)诚隙,那么即使硬鍵盤沒有展示給用戶讶隐,哪怕設(shè)備沒有硬鍵盤起胰,也可以使用此限定符。如果沒有提供或已經(jīng)禁用軟鍵盤巫延,則只有在顯示硬鍵盤時才會使用此限定符效五。
keyshidden:設(shè)備具有可用的硬鍵盤,但它處于隱藏狀態(tài)炉峰,且設(shè)備沒有啟用軟鍵盤畏妖。
keyssoft:設(shè)備已經(jīng)啟用軟鍵盤(無論是否可見)。
如果提供了keysexposed資源疼阔,但未提供keyssoft資源戒劫,那么只要系統(tǒng)已經(jīng)啟用軟鍵盤,就會使用keysexposed資源婆廊,而不考慮鍵盤是否可見迅细。
如果用戶打開硬鍵盤,它有可能在應(yīng)用生命周期中發(fā)生改變淘邻。 如需了解這會在運行期間給應(yīng)用帶來哪些影響茵典,請參閱處理運行時變更。
另請參閱配置字段hardKeyboardHidden和keyboardHidden宾舅,這兩個字段分別指示硬鍵盤的可見性和任何一種鍵盤(包括軟鍵盤)的可見性统阿。
主要文本輸入法nokeys
qwerty
12keynokeys:設(shè)備沒有用于文本輸入的硬按鍵彩倚。
qwerty:設(shè)備具有標(biāo)準(zhǔn)硬鍵盤(無論是否對用戶可見)。
12key:設(shè)備具有 12 鍵硬鍵盤(無論是否對用戶可見)扶平。
另請參閱keyboard配置字段帆离,該字段指示可用的主要文本輸入法。
導(dǎo)航鍵可用性navexposed
navhiddennavexposed:導(dǎo)航鍵可供用戶使用结澄。
navhidden:導(dǎo)航鍵不可用(例如盯质,位于密封蓋子后面)。
如果用戶顯示導(dǎo)航鍵概而,它有可能在應(yīng)用生命周期中發(fā)生改變呼巷。 如需了解這會在運行期間給應(yīng)用帶來哪些影響,請參閱處理運行時變更赎瑰。
另請參閱navigationHidden配置字段王悍,該字段指示導(dǎo)航鍵是否處于隱藏狀態(tài)。
主要非觸摸導(dǎo)航方法nonav
dpad
trackball
wheelnonav:除了使用觸摸屏以外餐曼,設(shè)備沒有其他導(dǎo)航設(shè)施压储。
dpad:設(shè)備具有用于導(dǎo)航的方向鍵。
trackball:設(shè)備具有用于導(dǎo)航的軌跡球源譬。
wheel:設(shè)備具有用于導(dǎo)航的方向盤(不常見)集惋。
另請參閱navigation配置字段,該字段指示可用的導(dǎo)航方法類型踩娘。
平臺版本(API 級別)示例:
v3
v4
v7
等等設(shè)備支持的 API 級別刮刑。例如,v1對應(yīng)于 API 級別 1(帶有 Android 1.0 或更高版本系統(tǒng)的設(shè)備)养渴,v4對應(yīng)于 API 級別 4(帶有 Android 1.6 或更高版本系統(tǒng)的設(shè)備)雷绢。如需了解有關(guān)這些值的詳細信息,請參閱Android API 級別文檔理卑。
注:有些配置限定符是從 Android 1.0 才開始添加翘紊,因此并非所有版本的 Android 系統(tǒng)都支持所有限定符。使用新限定符會隱式添加平臺版本限定符藐唠,因此較舊版本系統(tǒng)的設(shè)備必然會忽略它帆疟。 例如,使用w600dp限定符會自動包括v13限定符宇立,因為可用寬度限定符是 API 級別 13 中的新增配置踪宠。為了避免出現(xiàn)任何問題,請始終包含一組默認(rèn)資源(一組“不帶限定符”的資源)泄伪。如需了解詳細信息殴蓬,請參閱利用資源提供最佳設(shè)備兼容性部分。
限定符命名規(guī)則
以下是一些關(guān)于使用配置限定符名稱的規(guī)則:
您可以為單組資源指定多個限定符,并使用短劃線分隔染厅。例如痘绎,drawable-en-rUS-land適用于橫排美國英語設(shè)備。
這些限定符必須遵循表 2中列出的順序肖粮。例如:
錯誤:drawable-hdpi-port/
正確:drawable-port-hdpi/
不能嵌套備用資源目錄孤页。例如,您不能擁有res/drawable/drawable-en/涩馆。
值不區(qū)分大小寫行施。在處理之前,資源編譯器會將目錄名稱轉(zhuǎn)換為小寫魂那,以避免不區(qū)分大小寫的文件系統(tǒng)出現(xiàn)問題蛾号。 名稱中使用的任何大寫字母只是為了便于認(rèn)讀。
對于每種限定符類型涯雅,僅支持一個值鲜结。例如,若要對西班牙語和法語使用相同的可繪制對象文件活逆,則您肯定不能擁有名為drawable-rES-rFR/的目錄精刷,而是需要兩個包含相應(yīng)文件的資源目錄,如drawable-rES/和drawable-rFR/蔗候。然而怒允,實際上您無需將相同的文件都復(fù)制到這兩個位置。相反锈遥,您可以創(chuàng)建指向資源的別名纫事。 請參閱下面的創(chuàng)建別名資源。
將備用資源保存到以這些限定符命名的目錄中之后迷殿,Android 會根據(jù)當(dāng)前設(shè)備配置在應(yīng)用中自動應(yīng)用這些資源儿礼。 每次請求資源時,Android 都會檢查備用資源目錄是否包含所請求的資源文件庆寺,然后查找最佳匹配資源(下文進行介紹)。 如果沒有與特定設(shè)備配置匹配的備用資源诉字,則 Android 會使用相應(yīng)的默認(rèn)資源(一組用于不含配置限定符的特定資源類型的資源)懦尝。