新增應用程式資源

點陣圖和版面配置等應用程式資源會整理成各模組 res/ 目錄中的特定類型目錄。您也可以新增對不同裝置設定優化的各檔案替代版本,例如,高密度螢幕使用高解析度版點陣圖。

Android Studio 可讓您根據要新增的資源類型,以數種方式新增資源和替代資源。本頁說明如何新增基本資源檔案、如何變更資源位置,以及資源合併的運作方式。

我們也建議您查看下列頁面,進一步瞭解如何建立特定資源類型:

如要瞭解如何透過應用程式程式碼參照資源,請參閱「提供資源」。

新增 XML 資源檔案

上方列出的頁面說明了各資源類型的工作流程,但您可以新增任何 XML 資源檔案,步驟如下:

  1. 在「Project」視窗中按一下目標應用程式模組 (在「Android」或「Project」的檢視畫面中),然後選取「File」>「New」>「Android resource file」

  2. 在對話方塊中填入相對應的資訊:
    • File name:輸入 XML 檔案的名稱 (不需要使用 .xml 後置字串)。
    • Resource type:選取您要建立的資源類型。
    • Root element:請選取檔案的根 XML 元素。部分資源類型僅支援一種根元素,因此視上面選取的類型而定,您可能無法編輯此選項。
    • Source set:選取您要儲存檔案的來源集
    • Directory name:目錄必須採用特定資源類型和設定限定詞的專屬名稱。因此,除非您想要手動將設定限定詞加入目錄名稱,否則請勿進行編輯 (請參閱「可用的限定詞」一節)。
    • Available qualifiers︰您不必在版面配置目錄中輸入設定限定詞,只要在左側清單中按一下限定詞,然後按一下「Add」
  3. 新增完所有您要的限定詞後,按一下「OK」

提示:在「res」資料夾中現有的資源目錄按一下滑鼠右鍵,然後選取「New > type-name resource file」。系統隨即開啟針對您想要的資源類型的簡化版「New Resource File」對話方塊。

提示:部分複雜的資源需要使用多個 XML 資源檔案。舉例來說,動畫的向量可繪項目具有一個向量可繪物件和ㄧ個需要至少 3 個 XML 檔案的動畫物件。如果您需要重複使用一或多個 XML 檔案,則可保留這些檔案。但是,如果 XML 檔案僅用於這個動畫向量可繪項目,您可以改用 Android 資產封裝工具 (AAPT) 提供的內嵌資源格式。有了 AAPT,您就可以在單一 XML 檔案中定義全部三項資源。詳情請參閱「內嵌複雜的 XML 資源」。

新增資源目錄

如要新增資源目錄,請按照下列步驟操作:

  1. 在「Project」視窗中按一下目標應用程式模組,然後依序選取「File」>「New」>「Android resource directory」

  2. 在對話方塊中填入相對應的資訊:
    • Directory name:目錄必須採用特定資源類型和設定限定詞的組合。因此,除非以手動方式將設定限定詞新增至目錄名稱,否則請勿編輯 (使用可用的限定詞)。
    • Resource type:選取您要建立的資源類型。
    • Source set:選取您要設定版面配置的來源集。
    • Available qualifiers︰您不必在版面配置目錄中輸入設定限定詞,只要在左側清單中按一下限定詞,然後按一下「Add」
  3. 新增完所有您要的限定詞後,按一下「OK」

變更資源目錄

根據預設,您的資源位於 module-name/src/source-set-name/res/。舉例來說,模組的主要來源集位於 src/main/res/,偵錯資源集的資源則位於 src/debug/res/

不過,您可以在 sourceSets {} 區塊中使用 res.srcDirs 屬性,將這些路徑變更為任何其他位置 (相對於 build.gradle 檔案)。例如:

Groovy

android {
    sourceSets {
        main {
            res.srcDirs = ['resources/main']
        }
        debug {
            res.srcDirs = ['resources/debug']
        }
    }
}

Kotlin

android {
    sourceSets {
        getByName("main") {
            res.setSrcDirs("resources/main")
        }
        getByName("debug") {
            res.setSrcDirs("resources/debug")
        }
    }
}

您也可以為一個來源集指定多個資源目錄,然後將建構工具合併在一起。例如:

Groovy


android {
    sourceSets {
        main {
            res.srcDirs = ['res1', 'res2']
        }
    }
}

Kotlin

android {
    sourceSets {
        main {
            res.srcDirs("res1", "res2")
        }
    }
}

詳情請參閱「來源集」。

資源合併

最終應用程式檔案中的資源可能來自 3 個不同來源:

當每個來源集或程式庫的所有資源都不重複時,這些資源就會加入最終應用程式。如果資源的檔案名稱在其資源類型目錄和資源限定詞 (如果已定義) 當中均不重複,即可視為不重複資源。

如果相同資源有兩個以上的相符版本,最終應用程式只會納入一個版本。建構工具會根據下列優先順序選取要保留的版本 (左側為最高優先順序):

建構變數 > 建構類型 > 變種版本 > 主要來源集 > 程式庫依附元件

舉例來說,如果主要來源集包含:

  • res/layout/foo.xml
  • res/layout-land/foo.xml

偵錯建構類型包含以下項目:

  • res/layout/foo.xml

接著,最終應用程式會包含偵錯建構類型的 res/layout/foo.xml,以及主要來源集的 res/layout-land/foo.xml

但是,如果您的建構設定為特定來源集指定多個資源資料夾,且這些來源之間發生衝突,則會導致錯誤和合併失敗,因為每個資源目錄的優先順序相同。