Android 资源是应用中非代码的静态内容(布局、字符串、图片、颜色等),统一存放在 res/ 目录,编译后生成 R 类供代码引用,是实现多设备适配、国际化、主题化的核心。下面先完整列举所有资源类型,再重点详解布局资源的四种常用类型。
一、Android 完整资源类型(res 目录全分类)
res/ 下按功能分多个子目录,每个目录对应一类资源,以下是全量类型及用途:
表格
| 目录 | 资源类型 | 核心用途 | 格式 / 说明 |
|---|---|---|---|
anim/ | 补间动画资源 | 定义视图的平移、缩放、旋转、渐变等补间动画 | XML 文件(如 fade_in.xml) |
animator/ | 属性动画资源 | 定义对象属性(如 x、alpha)变化的属性动画(推荐) | XML 文件(如 scale_anim.xml) |
color/ | 颜色状态列表 | 定义视图不同状态(按下、选中、禁用)的颜色切换 | XML 文件(如 button_color.xml) |
drawable/ | 可绘制资源 | 图片、形状、状态选择器、图层、矢量图等视觉资源 | PNG/JPG/WebP、.9.png、XML(shape/selector) |
mipmap/ | 启动图标资源 | 存放不同密度的应用启动图标(系统优化图标显示) | 位图文件(按 mipmap-hdpi/ 等密度区分) |
layout/ | 布局资源 | 定义 UI 界面的视图结构与排列规则 | XML 文件(如 activity_main.xml) |
menu/ | 菜单资源 | 定义选项菜单、上下文菜单、子菜单的结构 | XML 文件(如 main_menu.xml) |
raw/ | 原始资源 | 存放音频、视频、文本等未编译的原始文件 | 任意格式(MP3、MP4、txt 等) |
values/ | 值资源 | 集中管理字符串、颜色、尺寸、样式、主题、数组等常量 | XML 文件(strings.xml/colors.xml/styles.xml 等) |
xml/ | 自定义 XML 资源 | 存放应用配置、权限说明、自定义解析的 XML | 任意业务 XML 文件 |
font/ | 字体资源 | 引入自定义字体文件(TTF/OTF) | 字体文件(如 roboto.ttf) |
raw/assets/ | 资产资源 | 不参与编译、通过 AssetManager 访问的文件(可选) | 任意格式(大型文件、配置文件) |
二、布局资源(layout/)核心:四种常用类型详解
布局资源是 Android UI 的基础,通过 XML 定义视图的排列规则,四种最常用类型为:LinearLayout(线性布局)、RelativeLayout(相对布局)、ConstraintLayout(约束布局)、FrameLayout(帧布局) 。
1. LinearLayout(线性布局)
核心特性
- 按单一方向(水平 / 垂直) 线性排列子视图,子元素依次排布,不可重叠。
- 核心属性:
android:orientation(horizontal/vertical)、android:layout_weight(权重,按比例分配剩余空间)。 - 优点:简单直观、嵌套层级少、性能高;缺点:复杂布局需多层嵌套,适配性差。
常用属性
表格
| 属性 | 说明 |
|---|---|
android:orientation | 排列方向:vertical(垂直,默认)、horizontal(水平) |
android:layout_weight | 子视图权重,值越大占比越高(仅在对应方向有剩余空间时生效) |
android:gravity | 子视图在布局内的对齐方式(center/left/right/top/bottom) |
android:layout_gravity | 当前子视图在父布局中的对齐方式 |
2. RelativeLayout(相对布局)
核心特性
- 子视图相对于父布局或其他子视图定位,无需嵌套即可实现复杂排列。
- 核心:通过
layout_alignParentXXX(相对于父)、layout_toRightOf/layout_below(相对于兄弟)等属性定位。 - 优点:灵活性高、减少嵌套;缺点:属性繁多、复杂布局易混乱、性能略低于 LinearLayout(已逐渐被 ConstraintLayout 替代)。
3. ConstraintLayout(约束布局)
核心特性
- Google 现代开发首选布局,通过双向约束关系定位视图,无需嵌套即可实现任意复杂布局。
- 核心:每个视图至少需要水平 + 垂直各一条约束,支持相对定位、居中、链(Chain)、引导线(Guideline)、屏障(Barrier)等高级功能。
- 优点:无嵌套、性能最优、可视化编辑友好、适配性极强;缺点:学习成本略高。
常用属性(以 app: 开头,需引入约束库)
4. FrameLayout(帧布局)
核心特性
- 所有子视图层叠显示,默认对齐父布局左上角,后添加的视图覆盖先添加的。
- 核心:无复杂排列规则,仅支持简单对齐与层级叠加,性能极高。
- 优点:极简、性能最优、适合单视图或层叠场景;缺点:仅支持层叠,无法线性 / 相对排列。
常用属性
android:foreground:设置前景图(覆盖在所有子视图之上)。android:foregroundGravity:前景图的对齐方式。android:layout_gravity:子视图在帧布局内的对齐方式(center/bottom等)。
三、四种布局核心对比(快速选型)
表格
| 布局 | 排列方式 | 核心优势 | 核心劣势 | 推荐场景 |
|---|---|---|---|---|
| LinearLayout | 水平 / 垂直线性 | 简单、性能高 | 复杂布局需嵌套 | 简单列表、均分布局 |
| RelativeLayout | 相对定位 | 灵活、少嵌套 | 属性复杂、性能一般 | 中等复杂度 UI(逐步淘汰) |
| ConstraintLayout | 约束关系 | 无嵌套、性能最优、适配强 | 学习成本略高 | 所有场景(首选) |
| FrameLayout | 层叠 | 极简、性能最高 | 仅支持层叠 | 单视图、层叠效果、Fragment |
四、布局资源开发最佳实践
- 优先使用 ConstraintLayout,减少嵌套层级,提升绘制性能。
- 简单线性排列用 LinearLayout,配合
layout_weight实现均分。 - 层叠 / 单视图场景用 FrameLayout,避免冗余布局。
- 布局文件命名规范:
activity_xxx.xml、fragment_xxx.xml、item_xxx.xml,便于维护。 - 多设备适配:用
layout-land/(横屏)、layout-sw600dp/(平板)等限定符区分布局。