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