應用程式圖示、本地化字串和點陣圖等應用程式資源,會依照類型歸入各模組 res/ 目錄中的特定目錄。您也可以為每個檔案新增額外版本,針對不同裝置設定進行最佳化,例如用於高密度螢幕的高解析度版點陣圖。
您可以使用 Android Studio,根據要新增的資源類型,以數種方式新增新資源和額外資源。本頁說明如何新增基本資源檔案、如何變更資源位置,以及資源合併的運作方式。
在 Jetpack Compose 中,您可以使用 Kotlin 定義 UI,而非 XML 版面配置。不過,您仍可使用 res/ 目錄儲存應用程式層級的靜態資產,例如圖示、字型和翻譯。如要瞭解如何在可組合函式中存取這些資源,請參閱「Compose 中的資源」。
如要進一步瞭解如何建立特定資源類型,請參閱以下頁面:
- 如要新增字串檔案,請參閱「使用翻譯編輯器將使用者介面本地化」。
- 如要新增點陣圖,請參閱「建立應用程式圖示」。
- 如要新增 SVG 檔案,請參閱「新增多種密度的向量圖形」。
如要瞭解如何在應用程式程式碼中參照資源,請參閱「應用程式資源總覽」。
新增 XML 資源檔案
上述頁面連結說明瞭各資源類型的工作流程,但您可以新增任何 XML 資源檔案,步驟如下:
- 在「Android」或「Project」檢視畫面,按一下「Project」視窗中的目標應用程式模組。
- 依序選取「File」>「New」>「Android resource file」。
圖 1. 「New Resource File」對話方塊。
- 在對話方塊中填入相對應的資訊:
- 「File name」:輸入 XML 檔案名稱 (不必加上
.xml後置字串)。 - 「Resource type」:選取要建立的資源類型。
- Root element:請選取檔案的根 XML 元素。部分資源類型僅支援一種根元素。因此視所選資源類型而定,您可能無法編輯此選項。
- 「Source set」:選取要用來存放檔案的來源集。
- Directory name:目錄必須採用特定資源類型和設定限定詞的專屬名稱。除非要手動將設定限定詞加入目錄名稱,否則請勿編輯這個名稱,只要選取「Available qualifiers」中的選項即可。
- 「Available qualifiers」:如果不想手動將設定限定詞加入目錄名稱,可以從清單選取限定詞,然後點選「Add」圖示
。
- 「File name」:輸入 XML 檔案名稱 (不必加上
- 新增完所有您要的限定詞後,按一下「OK」。
內嵌複雜 XML 資源
某些複雜資源需要多個 XML 資源檔案。舉例來說,雖然 Compose 具有強大的 動畫 API,但您可能需要使用動畫向量可繪項目,這類項目包含向量可繪物件和動畫物件,且至少需要三個 XML 檔案。
在這個例子中,如需重複使用一或多個 XML 檔案,可以建立及保留三個獨立的 XML 檔案。不過,如果 XML 檔案只用於這個動畫向量可繪項目,可以改用 Android 資產封裝工具 (AAPT) 提供的內嵌資源格式。有了 AAPT,就可以在單一 XML 檔案中定義全部三項資源。詳情請參閱「內嵌複雜的 XML 資源」。
新增資源目錄
如要新增資源目錄,請按照下列步驟操作:
- 在「Project」視窗中,按一下目標應用程式模組。
- 依序選取「File」>「New」>「Android 資源目錄」。
圖 2. 「New Resource Directory」對話方塊。
- 在對話方塊中填入相對應的資訊:
- Directory name:目錄必須採用特定資源類型和設定限定詞的組合。除非要手動將設定限定詞加入目錄名稱,否則請勿編輯這個名稱,只要選取「Available qualifiers」中的選項即可。
- 「Resource type」:選取要納入目錄的資源類型。
- 「Source set」:選取要存放目錄的來源集。
- 「Available qualifiers」:如果不想手動將設定限定詞加入目錄名稱,可以從清單選取限定詞,然後點選「Add」圖示
。
- 新增完所有您要的限定詞後,按一下「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/values/strings.xmlres/values-es/strings.xml
偵錯建構類型包含以下項目:
res/values/strings.xml
接著,最終應用程式會包含偵錯建構類型的 res/values/strings.xml,以及主要來源集的 res/values-es/strings.xml。
但是,如果您的建構設定為特定來源集指定多個資源資料夾,且這些來源之間發生衝突,則會導致錯誤和合併失敗,因為每個資源目錄的優先順序相同。