应用资源,例如位图和布局,都组织在每个模块的 res/
目录内的特定类型目录中。您还可以添加每个文件的替代版本,这些版本针对不同的设备配置进行了优化,例如,针对高密度屏幕的高分辨率位图版本。
Android Studio 通过多种方式帮助您添加新资源和替代资源,具体取决于您要添加的资源类型。本页面介绍如何添加基本资源文件、如何更改资源位置以及资源合并的工作方式。
有关如何创建特定资源类型的详细信息,请参阅以下页面:
- 要添加布局文件,请参阅 使用布局编辑器构建 UI。
- 要添加字符串文件,请参阅 使用翻译编辑器本地化 UI。
- 要添加位图,请参阅 使用图像资源工作室创建应用图标。
- 要添加 SVG 文件,请参阅 添加多密度矢量图形。
有关如何从您的应用代码引用资源的信息,请参阅 应用资源概述。
添加 XML 资源文件
尽管前面页面链接描述了针对每种资源类型定制的工作流程,但您可以按照以下步骤添加任何 XML 资源文件:
在项目窗口中(在Android视图或项目视图中),单击目标应用模块。
- 选择文件 > 新建 > Android 资源文件。
- 填写对话框中的详细信息:
- 文件名:输入 XML 文件的名称(不需要
.xml
后缀)。 - 资源类型:选择要创建的资源类型。
- 根元素:如果适用,请选择文件的根 XML 元素。某些资源类型仅支持一种类型的根元素。根据所选资源类型,此项可能无法编辑。
- 源集:选择要保存文件的 源集。
- 目录名:目录的命名方式必须特定于资源类型和配置限定符。除非您要手动将配置限定符添加到目录名(请改用可用限定符),否则不要编辑此项。
- 可用限定符:您可以通过从列表中选择限定符并单击添加 来添加它们,而无需手动在目录名中包含配置限定符。
- 文件名:输入 XML 文件的名称(不需要
- 添加完所有所需的限定符后,单击确定。
提示:要打开特定于您要添加的资源类型的简化版新建资源文件对话框,请右键单击res文件夹内的现有资源目录,然后选择新建 > type-name 资源文件。
内联复杂 XML 资源
某些复杂资源需要多个 XML 资源文件。例如,动画矢量可绘制对象包含矢量可绘制对象和动画对象,至少需要三个 XML 文件。
在此示例中,如果需要重用一个或多个 XML 文件,您可以创建并保留这三个单独的 XML 文件。但是,如果 XML 文件仅用于此动画矢量可绘制对象,则可以使用 Android 资源打包工具 (AAPT) 提供的内联资源格式。使用 AAPT,您可以在一个 XML 文件中定义所有三个资源。有关更多信息,请参阅 内联复杂 XML 资源。
添加资源目录
要添加新的资源目录,请按照以下步骤操作:
在项目窗口中单击目标应用模块。
- 选择文件 > 新建 > Android 资源目录。
- 填写对话框中的详细信息:
- 目录名:目录的命名方式必须特定于资源类型和配置限定符的组合。除非您要手动将配置限定符添加到目录名(请改用可用限定符),否则不要编辑此项。
- 资源类型:选择要包含在目录中的资源类型。
- 源集:选择要放置目录的源集。
- 可用限定符:您可以通过从列表中选择限定符并单击添加 来添加它们,而无需手动在目录名中包含配置限定符。
- 添加完所有所需的限定符后,单击确定。
更改资源目录
默认情况下,您的资源位于 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
。
但是,如果您的构建配置为给定的源集指定了 多个资源文件夹,并且这些资源之间存在冲突,则会发生错误并且合并失败,因为每个资源目录都具有相同的优先级。