替代資源
替代資源是以特定裝置或運行時間設定為目標的資源,例如目前語言、特定螢幕大小或圖元密度。 如果 Android 比預設資源更符合特定裝置或設定的資源,則會改用該資源。 如果找不到符合目前組態的替代資源,則會載入預設資源。 Android 如何決定應用程式將使用哪些資源的詳細數據,請參閱資源位置一節
替代資源會根據資源類型組織為 Resources 資料夾內的子目錄,就像預設資源一樣。 替代資源子目錄的名稱格式為: ResourceType-限定符
限定符 是識別特定裝置組態的名稱。 名稱中可能有一個以上的限定符,每個限定符都以破折號分隔。 例如,下列螢幕快照顯示簡單專案,其中包含各種設定的替代資源,例如地區設定、螢幕密度、螢幕大小和方向:
將限定符新增至資源類型時,適用下列規則:
可能有一個以上的限定符,每個限定符都以破折號分隔。
限定符可能只指定一次。
限定符必須依下表中出現的順序排列。
可能的限定符如下所列以供參考:
MCC 和 MNC – 行動 國家/地區代碼 (MCC) 和選擇性的行動 網路代碼 (MNC)。 SIM 卡會提供 MCC,而裝置連線的網路則會提供 MNC。 雖然可以使用行動國家/地區代碼以地區設定為目標,但建議方法是使用下面指定的語言限定符。 例如,若要將資源設為德國的目標,限定符會是
mcc262
。 若要以美國 T-Mobile 的資源為目標,限定符為mcc310-mnc026
。 如需行動國家/地區代碼和行動網路代碼的完整清單,請參閱 http://mcc-mnc.com/。語言 – 雙字母 ISO 639-1 語言代碼,並選擇性地後面接著兩個字母 ISO-3166-alpha-2 區域代碼。 如果兩個
-r
限定符都提供,則它們會以 分隔。 例如,若要以法語地區設定為目標,則會使用的fr
限定符。 為了以法加地區設定為目標,fr-rCA
將使用 。 如需語言代碼和區域代碼的完整清單,請參閱 語言 名稱表示法和 國家/地區名稱和程式代碼元素的程序代碼。最小寬度 – 指定應用程式要執行的最小螢幕寬度。 在建立不同畫面的資源中詳細說明。 適用於 API 層級 13 (Android 3.2) 和更新版本。 例如,限定符
sw320dp
用於以高度和寬度至少為320dp的裝置為目標。可用寬度 – 螢幕寬度下限,格式為 wN dp,其中 N 是密度獨立圖元的寬度。 當使用者輪替裝置時,此值可能會變更。 在建立不同畫面的資源中詳細說明。 適用於 API 層級 13 (Android 3.2) 和更新版本。 範例:限定符 w720dp 用於以寬度至少為720dp的裝置為目標。
可用高度 – 螢幕的最低高度,格式為 hN dp,其中 N 是 dp 中的高度。 當使用者輪替裝置時,此值可能會變更。 在建立不同畫面的資源中詳細說明。 適用於 API 層級 13 (Android 3.2) 和更新版本。 例如,限定符 h720dp 用於以高度至少為 720dp 的裝置為目標
螢幕大小 – 此限定符是這些資源所針對之螢幕大小的一般化。 在建立不同畫面的資源中會更詳細地說明。 可能的值為
small
、normal
、large
和xlarge
。 在 API 層級 9 中新增 (Android 2.3/Android 2.3.1/Android 2.3.2)屏幕外觀 – 這是根據外觀比例,而不是螢幕方向。 長螢幕較寬。 已在 API 層級 4 中新增 (Android 1.6)。 可能的值為 long 和 notlong。
螢幕方向 – 直向或橫向螢幕方向。 這可能會在應用程式的存留期內變更。 可能的值是
port
和land
。停駐模式 – 適用於汽車停駐或辦公桌座中的裝置。 在 API 層級 8 中新增 (Android 2.2.x)。 可能的值是
car
和desk
。夜間模式 – 應用程式是否在夜間或白天執行。 這可能會在應用程式的存留期間變更,並旨在讓開發人員有機會在夜間使用較深版本的介面。 在 API 層級 8 中新增 (Android 2.2.x)。 可能的值是
night
和notnight
。螢幕圖元密度 (dpi) – 實體螢幕上指定區域中的像素數目。 通常以每英吋點 (dpi) 表示。 可能的值包括:
ldpi
– 低密度螢幕。mdpi
– 中等密度螢幕hdpi
– 高密度螢幕xhdpi
– 額外的高密度螢幕nodpi
– 未調整的資源tvdpi
– 在 API 層級 13 (Android 3.2) 中引進 mdpi 與 hdpi 之間的螢幕。
觸控螢幕類型 – 指定裝置可能擁有的觸控螢幕類型。 可能的值為
notouch
(沒有觸摸屏)、stylus
(適合手寫筆的抗拒觸摸屏)和finger
(觸摸屏)。鍵盤可用性 – 指定可用的鍵盤類型。 這可能會在應用程式的存留期間變更 ,例如當使用者開啟硬體鍵盤時。 可能的值包括:
keysexposed
– 裝置有可用的鍵盤。 如果沒有啟用軟體鍵盤,則只有在開啟硬體鍵盤時,才會使用此鍵盤。keyshidden
– 裝置確實具有硬體鍵盤,但已隱藏,且未啟用軟體鍵盤。keyssoft
– 裝置已啟用軟體鍵盤。
主要文字輸入法 – 用來指定輸入可用的硬體金鑰種類。 可能的值包括:
nokeys
– 輸入沒有硬體金鑰。qwerty
– 有可用的 qwerty 鍵盤。12key
– 有 12 鍵的硬體鍵盤
瀏覽金鑰可用性 – 當 5 向或 d-pad (方向板) 瀏覽可供使用時。 這可能會在應用程式的存留期內變更。 可能的值包括:
navexposed
– 使用者可以使用導覽金鑰navhidden
– 無法使用導覽鍵。
主要非觸控流覽方法 – 裝置上可用的瀏覽類型。 可能的值包括:
nonav
– 唯一可用的瀏覽設備是觸摸屏dpad
– d-pad (方向板) 可用於流覽trackball
– 裝置有用於瀏覽的追蹤球wheel
– 有一或多個方向盤可供使用的情況
平臺版本 (API 層級) – 裝置以 vN 格式支援的 API 層級,其中 N 是目標 API 層級。 例如,v11 會以 API 層級 11 (Android 3.0) 裝置為目標。
如需資源限定符的詳細資訊,請參閱 在Android開發人員網站上提供資源 。
Android 如何決定要使用的資源
Android 應用程式很可能包含許多資源。 請務必瞭解Android如何在裝置上執行時選取應用程式的資源。
Android 會逐一查看下列規則測試來判斷資源基底:
消除矛盾限定符 – 例如,如果裝置方向為直向,則會拒絕所有橫向資源目錄。
不支援忽略限定符 – 並非所有限定符都可供所有 API 層級使用。 如果資源目錄包含裝置不支援的限定符,則會忽略該資源目錄。
識別下一個最高優先順序限定符 – 參考上方的表格,選取下一個最高優先順序限定符(從上到下)。
保留限定符 的任何資源目錄 – 如果有任何符合限定符的資源目錄與上表,請選取下一個最高優先順序限定符(從上到下)。
下列流程圖也會說明這些規則:
當系統尋找密度特定資源且找不到它們時,它會嘗試尋找其他密度特定資源並調整它們。 Android 不一定使用預設資源。 例如,在尋找低密度資源且無法使用時,Android 可能會透過預設或中等密度資源選取高密度版本的資源。 這樣做是因為高密度資源可以縮減 0.5 倍,這會導致可見度問題比縮小需要 0.75 因數的中型密度資源少。
例如,請考慮具有下列可繪製資源目錄的應用程式:
drawable
drawable-en
drawable-fr-rCA
drawable-en-port
drawable-en-notouch-12key
drawable-en-port-ldpi
drawable-port-ldpi
drawable-port-notouch-12key
現在應用程式會以下列設定在裝置上執行:
- 地區設定 – en-GB
- 方向 – 埠
- 螢幕密度 – hdpi
- 觸控螢幕類型 – notouch
- 主要輸入法 – 12key
首先,法國資源會隨著與 地區設定 en-GB
衝突而消除,因此我們留下:
drawable
drawable-en
drawable-en-port
drawable-en-notouch-12key
drawable-en-port-ldpi
drawable-port-ldpi
drawable-port-notouch-12key
接下來,會從上述限定符數據表中選取第一個限定符:MCC 和 MNC。 沒有包含此限定符的資源目錄,因此會忽略 MCC/MNC 程式代碼。
已選取下一個限定符,也就是 Language。 有符合語言代碼的資源。 不符合語言程式代碼 en
的所有資源目錄都會遭到拒絕,因此資源清單現在是:
drawable-en-port
drawable-en-notouch-12key
drawable-en-port-ldpi
存在的下一個限定符適用於螢幕方向,因此會排除不符合螢幕方向 port
的所有資源目錄:
drawable-en-port
drawable-en-port-ldpi
接下來是螢幕密度的限定符, ldpi
這會導致排除一個資源目錄:
drawable-en-port-ldpi
由於此程式,Android 會使用裝置資源目錄中 drawable-en-port-ldpi
的可繪製資源。
注意
螢幕大小限定符會提供此選取程式的一個例外狀況。 Android 可以選取專為比目前裝置提供更小螢幕所設計的資源。 例如,大型螢幕裝置可能會使用為一般大小的螢幕提供的資源。 不過,反轉情況並非如此:相同的大型螢幕裝置不會使用針對 xlarge 畫面提供的資源。 如果 Android 找不到符合指定螢幕大小的資源集,應用程式將會當機。