新增應用程式資源

點陣圖和版面配置等應用程式資源會依照類型,歸入各模組 res/ 目錄中的特定目錄。您也可以為每個檔案新增額外版本,針對不同裝置設定進行最佳化,例如用於高密度螢幕的高解析度版點陣圖。

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

如要進一步瞭解如何建立特定資源類型,請參閱以下頁面:

如要瞭解如何在應用程式程式碼中參照資源,請參閱「應用程式資源總覽」。

新增 XML 資源檔案

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

  1. 在「Android」或「Project」檢視畫面,按一下「Project」視窗中的目標應用程式模組。

  2. 依序選取「File」>「New」>「Android resource file」

    圖 1.「New Resource File」對話方塊。

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

提示:如要針對想新增的資源類型,開啟專屬的簡化版「New Resource File」對話方塊,請在「res」資料夾中現有的資源目錄上按一下滑鼠右鍵,然後依序選取「New」>「type-name resource file」

內嵌複雜 XML 資源

某些複雜資源需要多個 XML 資源檔案。舉例來說,單一動畫向量可繪項目包含一個向量可繪項目物件和一個動畫物件,並需要至少三個 XML 檔案。

在這個例子中,如需重複使用一或多個 XML 檔案,可以建立及保留三個獨立的 XML 檔案。不過,如果 XML 檔案只用於這個動畫向量可繪項目,可以改用 Android 資產封裝工具 (AAPT) 提供的內嵌資源格式。有了 AAPT,就可以在單一 XML 檔案中定義全部三項資源。詳情請參閱「內嵌複雜的 XML 資源」。

新增資源目錄

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

  1. 在「Project」視窗中,按一下目標應用程式模組。

  2. 依序選取「File」>「New」>「Android resource directory」

    圖 2.「New Resource Directory」對話方塊。

  3. 在對話方塊中填入相對應的資訊:
    • 「Directory name」:目錄名稱必須採用資源類型和設定限定詞的專屬名稱。除非要手動將設定限定詞加入目錄名稱,否則請勿編輯這個名稱,只要選取「Available qualifiers」中的選項即可。
    • 「Resource type」:選取要納入目錄的資源類型。
    • 「Source set」:選取要存放目錄的來源集。
    • 「Available qualifiers」:如果不想手動將設定限定詞加入目錄名稱,可以從清單選取限定詞,然後點選「Add」圖示
  4. 新增完所有需要的限定詞後,按一下「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.srcDirs("resources/main")
        }
        getByName("debug") {
            res.srcDirs("resources/debug")
        }
    }
}

您也可以為一個來源集指定多個資源目錄,接著建構工具會合併這些目錄。例如:

Groovy

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

Kotlin

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

詳情請參閱「來源集」。

資源合併

最終應用程式檔案中的資源可來自以下三個來源:

  • 主要來源集 (通常位於 src/main/res/)
  • 建構變化版本來源集
  • Android 程式庫 (AAR)

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

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

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

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

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

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

  • res/layout/example.xml

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

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