共用方式為


替代資源

替代資源是以特定裝置或運行時間設定為目標的資源,例如目前語言、特定螢幕大小或圖元密度。 如果 Android 比預設資源更符合特定裝置或設定的資源,則會改用該資源。 如果找不到符合目前組態的替代資源,則會載入預設資源。 Android 如何決定應用程式將使用哪些資源的詳細數據,請參閱資源位置一節

替代資源會根據資源類型組織為 Resources 資料夾內的子目錄,就像預設資源一樣。 替代資源子目錄的名稱格式為: ResourceType-限定符

限定符 是識別特定裝置組態的名稱。 名稱中可能有一個以上的限定符,每個限定符都以破折號分隔。 例如,下列螢幕快照顯示簡單專案,其中包含各種設定的替代資源,例如地區設定、螢幕密度、螢幕大小和方向:

將限定符新增至資源類型時,適用下列規則:

  1. 可能有一個以上的限定符,每個限定符都以破折號分隔。

  2. 限定符可能只指定一次。

  3. 限定符必須依下表中出現的順序排列。

可能的限定符如下所列以供參考:

  • 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 的裝置為目標

  • 螢幕大小 – 此限定符是這些資源所針對之螢幕大小的一般化。 在建立不同畫面的資源中會更詳細地說明。 可能的值為 smallnormallargexlarge。 在 API 層級 9 中新增 (Android 2.3/Android 2.3.1/Android 2.3.2)

  • 屏幕外觀 – 這是根據外觀比例,而不是螢幕方向。 長螢幕較寬。 已在 API 層級 4 中新增 (Android 1.6)。 可能的值為 long 和 notlong。

  • 螢幕方向 – 直向或橫向螢幕方向。 這可能會在應用程式的存留期內變更。 可能的值是 portland

  • 停駐模式 – 適用於汽車停駐或辦公桌座中的裝置。 在 API 層級 8 中新增 (Android 2.2.x)。 可能的值是 cardesk

  • 夜間模式 – 應用程式是否在夜間或白天執行。 這可能會在應用程式的存留期間變更,並旨在讓開發人員有機會在夜間使用較深版本的介面。 在 API 層級 8 中新增 (Android 2.2.x)。 可能的值是 nightnotnight

  • 螢幕圖元密度 (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 層級使用。 如果資源目錄包含裝置不支援的限定符,則會忽略該資源目錄。

  • 識別下一個最高優先順序限定符 – 參考上方的表格,選取下一個最高優先順序限定符(從上到下)。

  • 保留限定符 的任何資源目錄 – 如果有任何符合限定符的資源目錄與上表,請選取下一個最高優先順序限定符(從上到下)。

下列流程圖也會說明這些規則:

Resources flowchart

當系統尋找密度特定資源且找不到它們時,它會嘗試尋找其他密度特定資源並調整它們。 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 找不到符合指定螢幕大小的資源集,應用程式將會當機。