android 资源文件类型,命名规则(配置限定符名称),及其加载规则
表 1.?項目?res/?目錄中支持的資源目錄。
| animator/ | 用于定義屬性動畫的 XML 文件。 |
| anim/ | 用于定義漸變動畫的 XML 文件。(屬性動畫也可保存在此目錄中,但為了區(qū)分這兩種類型,屬性動畫首選?animator/?目錄。) |
| color/ | 用于定義顏色狀態(tài)列表的 XML 文件。請參閱顏色狀態(tài)列表資源 |
| drawable/ | 位圖文件(.png、.9.png、.jpg、.gif)或編譯為以下可繪制對象資源子類型的 XML 文件:
請參閱?Drawable 資源。 |
| mipmap/ | 適用于不同啟動器圖標密度的可繪制對象文件。如需了解有關(guān)使用?mipmap/?文件夾管理啟動器圖標的詳細信息,請參閱管理項目概覽。 |
| layout/ | 用于定義用戶界面布局的 XML 文件。請參閱布局資源。 |
| menu/ | 用于定義應用菜單(如選項菜單、上下文菜單或子菜單)的 XML 文件。請參閱菜單資源。 |
| raw/ | 需以原始形式保存的任意文件。如要使用原始?InputStream?打開這些資源,請使用資源 ID(即?R.raw.filename)調(diào)用?Resources.openRawResource()。 但是,如需訪問原始文件名和文件層次結(jié)構(gòu),則可以考慮將某些資源保存在?assets/?目錄(而非?res/raw/)下。assets/?中的文件沒有資源 ID,因此您只能使用?AssetManager?讀取這些文件。 |
| values/ | 包含字符串、整型數(shù)和顏色等簡單值的 XML 文件。 其他?res/?子目錄中的 XML 資源文件會根據(jù) XML 文件名定義單個資源,而?values/?目錄中的文件可描述多個資源。對于此目錄中的文件,<resources>?元素的每個子元素均會定義一個資源。例如,<string>?元素會創(chuàng)建?R.string?資源,<color>?元素會創(chuàng)建?R.color?資源。 由于每個資源均使用自己的 XML 元素進行定義,因此您可以隨意命名文件,并在某個文件中放入不同的資源類型。但是,您可能需要將獨特的資源類型放在不同的文件中,使其一目了然。例如,對于可在此目錄中創(chuàng)建的資源,下面給出了相應的文件名約定:
請參閱字符串資源、樣式資源和更多資源類型。 |
| xml/ | 可在運行時通過調(diào)用?Resources.getXML()?讀取的任意 XML 文件。各種 XML 配置文件(如可搜索配置)都必須保存在此處。 |
| font/ | 帶有擴展名的字體文件(如?.ttf、.otf?或?.ttc),或包含?<font-family>?元素的 XML 文件。如需詳細了解作為資源的字體,請參閱?XML 中的字體。 |
表 2.?配置限定符名稱。
| MCC 和 MNC | 示例: mcc310 mcc310-mnc004 mcc208-mnc00 等等 | 移動設備國家代碼 (MCC),(可選)后跟設備 SIM 卡中的移動設備網(wǎng)絡代碼 (MNC)。例如,mcc310?是指美國的任一運營商,mcc310-mnc004?是指美國的 Verizon 公司,mcc208-mnc00?是指法國的 Orange 公司。 如果設備使用無線裝置連接(GSM 手機),則 MCC 和 MNC 值均來自 SIM 卡。 您也可以單獨使用 MCC(例如,將國家/地區(qū)特定的合法資源加入應用)。如果只需根據(jù)語言指定,則改用語言和地區(qū)限定符(稍后進行介紹)。如果決定使用 MCC 和 MNC 限定符,請謹慎執(zhí)行此操作并測試限定符是否按預期工作。 另請參閱配置字段?mcc?和?mnc,二者分別表示當前的移動設備國家代碼和移動設備網(wǎng)絡代碼。 |
| 語言和區(qū)域 | 示例: en fr en-rUS fr-rFR fr-rCA b+en b+en+US b+es+419 | 語言通過由兩個字母組成的?ISO 639-1?語言代碼進行定義,可以選擇后跟兩個字母組成的?ISO 3166-1-alpha-2?區(qū)域碼(前綴用小寫字母?r)。 這些代碼不區(qū)分大小寫;r?前綴用于區(qū)分區(qū)域碼。您不能單獨指定區(qū)域。 Android 7.0(API 級別 24)引入對?BCP 47 語言標記的支持,可供您用來限定特定語言和區(qū)域的資源。語言標記由一個或多個子標記序列組成,每個子標記都能優(yōu)化或縮小由整體標記標識的語言范圍。如需了解有關(guān)語言標記的詳細信息,請參閱用于標識語言的標記。 如要使用 BCP 47 語言標記,請將?b+?和兩個字母的?ISO 639-1?語言代碼連接;其后還可選擇使用其他子標記,用?+?分隔即可。 ? 如果用戶在系統(tǒng)設置中更改語言,則語言標記可能會在應用的生命周期中發(fā)生變更。如需了解運行時應用會因此受到何種影響,請參閱處理運行時變更。 有關(guān)針對其他語言本地化應用的完整指南,請參閱本地化。 另請參閱?getLocales()?方法,了解該方法提供的已定義語言區(qū)域列表。此列表包含主要的語言區(qū)域。 |
| 布局方向 | ldrtl ldltr | 應用的布局方向。ldrtl?是指“布局方向從右到左”。ldltr?是指“布局方向從左到右”(默認的隱式值)。 此配置適用于布局、可繪制資源或值等任何資源。 例如,若要針對阿拉伯語提供某種特定布局,并針對任何其他“從右到左”的語言(如波斯語或希伯來語)提供某種通用布局,則可提供以下資源: res/layout/main.xml (Default layout)layout-ar/main.xml (Specific layout for Arabic)layout-ldrtl/main.xml (Any "right-to-left" language, exceptfor Arabic, because the "ar" language qualifierhas a higher precedence.)? 請注意:如要為應用啟用從右到左的布局功能,則必須將?supportsRtl?設置為?"true",并將?targetSdkVersion?設置為 17 或更高版本。 此項為 API 級別 17 中的新增配置。 |
| smallestWidth | sw<N>dp 示例: sw320dp sw600dp sw720dp 等等 | 屏幕的基本尺寸,由可用屏幕區(qū)域的最小尺寸指定。具體而言,設備的 smallestWidth 是屏幕可用高度和寬度的最小尺寸(您也可將其視為屏幕的“最小可能寬度”)。無論屏幕的當前方向如何,您均可使用此限定符確保應用界面的可用寬度至少為?<N>?dp。 例如,如果布局要求屏幕區(qū)域的最小尺寸始終至少為 600dp,則可使用此限定符創(chuàng)建布局資源?res/layout-sw600dp/。僅當可用屏幕的最小尺寸至少為 600dp(無論 600dp 表示的邊是用戶所認為的高度還是寬度)時,系統(tǒng)才會使用這些資源。最小寬度為設備的固定屏幕尺寸特征;即使屏幕方向發(fā)生變化,設備的最小寬度仍會保持不變。 使用最小寬度確定一般屏幕尺寸非常有用,因為寬度通常是設計布局時的驅(qū)動因素。界面經(jīng)常會垂直滾動,但對其水平方向所需要的最小空間具有非常硬性的限制。可用寬度也是確定是否對手持式設備使用單窗格布局,或?qū)ζ桨咫娔X使用多窗格布局的關(guān)鍵因素。因此,您可能最關(guān)注每臺設備上的最小可能寬度。 設備的最小寬度會將屏幕裝飾元素和系統(tǒng)界面考慮在內(nèi)。例如,如果設備屏幕上的某些永久性界面元素沿著最小寬度軸占據(jù)空間,則系統(tǒng)會聲明最小寬度小于實際屏幕尺寸,因為這些屏幕像素不適用于您的界面。 以下是一些可用于常見屏幕尺寸的值:
當應用為多個資源目錄提供不同的 smallestWidth 限定符值時,系統(tǒng)會使用最接近(但未超出)設備 smallestWidth 的值。 此項為 API 級別 13 中的新增配置。 另請參閱?android:requiresSmallestWidthDp?屬性(聲明與應用兼容的最小 smallestWidth)和?smallestScreenWidthDp?配置字段(存放設備的 smallestWidth 值)。 如需了解有關(guān)不同屏幕設計和使用此限定符的詳細信息,請參閱支持多種屏幕開發(fā)者指南。 |
| 可用寬度 | w<N>dp 示例: w720dp w1024dp 等等 | 指定資源應使用的最小可用屏幕寬度(以?dp?為單位,由?<N>?值定義)。當屏幕方向在橫向和縱向之間切換時,此配置值也會隨之變化,以匹配當前的實際寬度。 此功能往往有助于確定是否使用多窗格布局,因為即便在使用平板電腦設備時,您通常也不希望豎屏以橫屏的方式使用多窗格布局。因此,您可以使用此功能指定布局所需的最小寬度,而無需同時使用屏幕尺寸和屏幕方向限定符。 應用為此配置提供具有不同值的多個資源目錄時,系統(tǒng)會使用最接近(但未超出)設備當前屏幕寬度的值。此處的值會考慮屏幕裝飾元素,因此如果設備顯示屏的左邊緣或右邊緣上有一些永久性 UI 元素,考慮到這些 UI 元素,同時為減少應用的可用空間,設備會使用小于實際屏幕尺寸的寬度值。 此項為 API 級別 13 中的新增配置。 另請參閱?screenWidthDp?配置字段,該字段存放當前屏幕寬度。 如需了解有關(guān)不同屏幕設計和使用此限定符的詳細信息,請參閱支持多種屏幕開發(fā)者指南。 |
| 可用高度 | h<N>dp 示例: h720dp h1024dp 等等 | 指定資源應使用的最小可用屏幕高度(以“dp”為單位,由?<N>?值定義)。當屏幕方向在橫向和縱向之間切換時,此配置值也會隨之變化,以匹配當前的實際高度。 對比使用此方式定義布局所需高度與使用?w<N>dp?定義所需寬度,二者均非常有用,且都無需同時使用屏幕尺寸和方向限定符。但大多數(shù)應用不需要此限定符,因為界面經(jīng)常垂直滾動,所以高度需更有彈性,而寬度則應更固定。 當應用為此配置提供具有不同值的多個資源目錄時,系統(tǒng)會使用最接近(但未超出)設備當前屏幕高度的值。此處的值會考慮屏幕裝飾元素,因此如果設備顯示屏的上邊緣或下邊緣上有一些永久性 UI 元素,考慮到這些 UI 元素,同時為減少應用的可用空間,設備會使用小于實際屏幕尺寸的高度值。非固定的屏幕裝飾元素(例如,全屏時可隱藏的手機狀態(tài)欄)并不在考慮范圍內(nèi),標題欄或操作欄等窗口裝飾亦如此,因此應用必須準備好處理稍小于其指定值的空間。 此項為 API 級別 13 中的新增配置。 另請參閱?screenHeightDp?配置字段,該字段存放當前屏幕寬度。 如需了解有關(guān)不同屏幕設計和使用此限定符的詳細信息,請參閱支持多種屏幕開發(fā)者指南。 |
| 屏幕尺寸 | small normal large xlarge |
請注意:使用尺寸限定符并不表示資源僅適用于該尺寸的屏幕。如果沒有為備用資源提供最符合當前設備配置的限定符,則系統(tǒng)可能會使用其中最匹配的資源。 注意:如果所有資源均使用大于當前屏幕的尺寸限定符,則系統(tǒng)不會使用這些資源,并且應用將在運行時崩潰(例如,如果所有布局資源均以?xlarge?限定符標記,但設備是標準尺寸的屏幕)。 此項為 API 級別 4 中的新增配置。 如需了解詳細信息,請參閱支持多種屏幕。 另請參閱?screenLayout?配置字段,該字段指示屏幕是小尺寸、標準尺寸還是大尺寸。 |
| 屏幕縱橫比 | long notlong |
此項為 API 級別 4 中新增配置。 此配置完全基于屏幕的縱橫比(寬屏較寬),并且與屏幕方向無關(guān)。 另請參閱?screenLayout?配置字段,該字段指示屏幕是否為寬屏。 |
| 圓形屏幕 | round notround |
此項為 API 級別 23 中的新增配置。 另請參閱?isScreenRound()?配置方法,該方法指示屏幕是否為圓形屏幕。 |
| 廣色域 | widecg nowidecg |
此項為 API 級別 26 中的新增配置。 另請參閱?isScreenWideColorGamut()?配置方法,該方法指示屏幕是否具有廣色域。 |
| 高動態(tài)范圍 (HDR) | highdr lowdr |
此項為 API 級別 26 中的新增配置。 另請參閱?isScreenHdr()?配置方法,該方法指示屏幕是否具有 HDR 功能。 |
| 屏幕方向 | port land |
如果用戶旋轉(zhuǎn)屏幕,此配置可能會在應用生命周期中發(fā)生變化。如需了解這會在運行時期間給應用帶來哪些影響,請參閱處理運行時變更。 另請參閱?orientation?配置字段,該字段指示當前的設備方向。 |
| 界面模式 | car desk television appliance watch vrheadset |
此項為 API 級別 8 中的新增配置,API 13 中的新增電視配置,API 20 中的新增手表配置。 如需了解應用在設備插入基座或從中移除時的響應方式,請閱讀確定并監(jiān)控插接狀態(tài)和類型。 如果用戶將設備插入基座,此配置可能會在應用生命周期中發(fā)生變化。您可以使用?UiModeManager?啟用或禁用其中的部分模式。如需了解這會在運行時期間給應用帶來哪些影響,請參閱處理運行時變更。 |
| 夜間模式 | night notnight |
此項為 API 級別 8 中的新增配置。 如果夜間模式停留在自動模式(默認),此配置可能會在應用生命周期中發(fā)生變化。在此情況下,該模式會根據(jù)當天的時間進行調(diào)整。您可以使用?UiModeManager?啟用或禁用此模式。如需了解這會在運行時期間給應用帶來哪些影響,請參閱處理運行時變更。 |
| 屏幕像素密度 (dpi) | ldpi mdpi hdpi xhdpi xxhdpi xxxhdpi nodpi tvdpi anydpi nnndpi |
六個基本密度之間的縮放比為 3:4:6:8:12:16(忽略 tvdpi 密度)。因此,9x9 (ldpi) 位圖相當于 12x12 (mdpi)、18x18 (hdpi)、24x24 (xhdpi) 位圖,依此類推。 如果您認為圖像資源在電視或其他某些設備上的呈現(xiàn)效果不夠好,進而想嘗試使用 tvdpi 資源,則縮放系數(shù)應為 1.33*mdpi。例如,mdpi 屏幕的 100px x 100px 圖像應相當于 tvdpi 屏幕的 133px x 133px 圖像。 請注意:使用密度限定符并不表示資源僅適用于該密度的屏幕。如果沒有為備用資源提供最符合當前設備配置的限定符,則系統(tǒng)可能使用其中最匹配的資源。 如需詳細了解如何處理不同屏幕密度以及 Android 如何縮放位圖以適應當前密度,請參閱支持多種屏幕。 |
| 觸摸屏類型 | notouch finger |
另請參閱?touchscreen?配置字段,該字段指示設備上的觸摸屏類型。 |
| 鍵盤可用性 | keysexposed keyshidden keyssoft |
如果您提供了?keysexposed?資源,但未提供?keyssoft?資源,則無論鍵盤是否可見,只要系統(tǒng)已啟用軟鍵盤,其便會使用?keysexposed?資源。 如果用戶打開硬鍵盤,此配置可能會在應用生命周期中發(fā)生變化。如需了解這會在運行時期間給應用帶來哪些影響,請參閱處理運行時變更。 另請參閱配置字段?hardKeyboardHidden?和?keyboardHidden,二者分別指示硬鍵盤的可見性和任一鍵盤(包括軟鍵盤)的可見性。 |
| 主要的文本輸入法 | nokeys qwerty 12key |
另請參閱?keyboard?配置字段,該字段指示可用的主要文本輸入法。 |
| 導航鍵可用性 | navexposed navhidden |
如果用戶顯示導航鍵,此配置可能會在應用生命周期中發(fā)生變化。如需了解這會在運行時期間給應用帶來哪些影響,請參閱處理運行時變更。 另請參閱?navigationHidden?配置字段,該字段指示導航鍵是否處于隱藏狀態(tài)。 |
| 主要的非觸摸導航方法 | nonav dpad trackball wheel |
另請參閱?navigation?配置字段,該字段指示可用的導航方法類型。 |
| 平臺版本(API 級別) | 示例: v3 v4 v7 等等 | 設備支持的 API 級別。例如,v1?對應 API 級別 1(裝有 Android 1.0 或更高版本系統(tǒng)的設備),v4?對應 API 級別 4(裝有 Android 1.6 或更高版本系統(tǒng)的設備)。如需了解有關(guān)這些值的詳細信息,請參閱?Android API 級別文檔。 |
限定符命名規(guī)則
以下是一些關(guān)于使用配置限定符名稱的規(guī)則:
- 您可以為單組資源指定多個限定符,并使用短劃線分隔。例如,drawable-en-rUS-land?適用于屏幕方向為橫向的美國英語設備。
- 這些限定符必須遵循表 2?中列出的順序。例如:
- 錯誤:drawable-hdpi-port/
- 正確:drawable-port-hdpi/
- 不能嵌套備用資源目錄。例如,您的目錄不能為?res/drawable/drawable-en/。
- 值不區(qū)分大小寫。在處理之前,資源編譯器會將目錄名稱轉(zhuǎn)換為小寫,以免不區(qū)分大小寫的文件系統(tǒng)出現(xiàn)問題。名稱中使用的所有大寫字母只是為了便于認讀。
- 每種限定符類型僅支持一個值。例如,若要對西班牙語和法語使用相同的可繪制對象文件,則您不能擁有名為?drawable-rES-rFR/?的目錄,而是需要兩個包含相應文件的資源目錄,如?drawable-rES/?和?drawable-rFR/。然而,您實際無需在兩處復制相同的文件。相反,您可以創(chuàng)建指向資源的別名。請參閱下面的創(chuàng)建別名資源。
Android 如何查找最佳匹配資源
當您請求要為其提供備用資源的資源時,Android 會根據(jù)當前的設備配置選擇要在運行時使用的備用資源。為演示 Android 如何選擇備用資源,假設以下可繪制對象目錄分別包含相同圖像的不同版本:
drawable/ drawable-en/ drawable-fr-rCA/ drawable-en-port/ drawable-en-notouch-12key/ drawable-port-ldpi/ drawable-port-notouch-12key/?
同時,假設設備配置如下:
語言區(qū)域 =?en-GB
屏幕方向 =?port
屏幕像素密度 =?hdpi
觸摸屏類型 =?notouch
主要文本輸入法 =?12key
通過將設備配置與可用的備用資源進行比較,Android 會從?drawable-en-port?中選擇可繪制對象。
系統(tǒng)使用以下邏輯決定要使用的資源:
?
圖 2.?Android 如何查找最佳匹配資源的流程圖。
drawable-fr-rCA/?目錄與?en-GB?語言區(qū)域沖突,因而被淘汰。
drawable/ drawable-en/ drawable-fr-rCA/ drawable-en-port/ drawable-en-notouch-12key/ drawable-port-ldpi/ drawable-port-notouch-12key/例外:屏幕像素密度是唯一一個未因沖突而被淘汰的限定符。盡管設備的屏幕密度為 hdpi,但是?drawable-port-ldpi/?未被淘汰,因為此時每個屏幕密度均視為匹配。如需了解詳細信息,請參閱支持多種屏幕文檔。
- 若無,請返回到第 2 步,看看下一個限定符。(在該示例中,除非到達語言限定符,否則答案始終為“否”。)
- 若有,請繼續(xù)執(zhí)行第 4 步。
?
例外:如果問題中的限定符是屏幕像素密度,則 Android 會選擇最接近設備屏幕密度的選項。一般來說,Android 偏向于縮小較大的原始圖像,而非放大較小的原始圖像。請參閱支持多種屏幕。
?
剩下的目錄是?drawable-en-port。
盡管系統(tǒng)會對所請求的每個資源執(zhí)行此程序,但是其仍會對某些方面做進一步優(yōu)化。例如,已知設備配置后,系統(tǒng)會淘汰可能永遠無法匹配的備用資源。比如,如果配置語言是英語(“en”),則系統(tǒng)絕不會將語言限定符設置為非英語的任何資源目錄加入選中的資源池(不過,仍會將不帶語言限定符的資源目錄加入該池)。
在根據(jù)屏幕尺寸限定符選擇資源時,如果沒有更好的匹配資源,則系統(tǒng)將使用專為小于當前屏幕的屏幕而設計的資源(例如,必要時,大尺寸屏幕將使用標準尺寸的屏幕資源)。但是,如果唯一可用的資源大于當前屏幕,則系統(tǒng)不會使用這些資源,并且如果沒有其他資源與設備配置匹配,應用將會崩潰(例如,如果所有布局資源均用?xlarge?限定符標記,但設備是標準尺寸的屏幕)。
?
總結(jié)
以上是生活随笔為你收集整理的android 资源文件类型,命名规则(配置限定符名称),及其加载规则的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 诛仙3网游:乾坤珠的获取与使用
- 下一篇: Odoo开发需要注意些什么?