Android 资源类型概述
Android 应用中的资源是指与代码分离但被应用使用的文件,它们被归类存放在 res/ 目录下,通过 R 类进行访问。常见的资源类型包括:
| 资源目录 | 说明 |
|---|---|
res/layout/ | 布局资源,定义用户界面结构(XML 文件) |
res/drawable/ | 可绘制资源,包括位图(PNG、JPG)、矢量图(Vector)、形状(Shape)、选择器(Selector)等 |
res/values/ | 简单值资源,如字符串(strings.xml)、颜色(colors.xml)、尺寸(dimens.xml)、样式(styles.xml)、数组(arrays.xml) |
res/mipmap/ | 应用图标资源,系统会根据屏幕密度自动选择最佳图标 |
res/anim/ | 补间动画资源(Tween Animation) |
res/animator/ | 属性动画资源(Property Animation) |
res/menu/ | 菜单资源(选项菜单、上下文菜单) |
res/xml/ | 任意 XML 文件,如搜索配置、App Widget 配置等 |
res/raw/ | 原始资源文件(如音频、视频等),通过 R.raw.filename 访问 |
assets/ | 与 res/ 平级,存放任意文件,通过 AssetManager 访问,不生成 R 索引 |
布局资源详解:四种常用布局类型
布局资源是定义 Android 应用界面结构的 XML 文件,位于 res/layout/ 目录下。系统提供了多种布局容器,其中四种最常用:
1. LinearLayout(线性布局)
特点:按水平或垂直方向依次排列子视图,支持权重(weight)分配剩余空间。
常用属性:
android:orientation:horizontal(水平)或vertical(垂直)android:layout_weight:子视图权重,按比例分配剩余空间android:gravity:控制容器内内容的对齐方式android:layout_gravity:控制子视图在父容器中的对齐方式
使用场景:
- 简单线性排列的界面,如登录表单(垂直)或按钮栏(水平)
- 需要按比例分配空间时(如左右两栏)
示例:
xml
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="用户名" />
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="登录" />
</LinearLayout>
2. RelativeLayout(相对布局)
特点:子视图通过相对于父容器或其他子视图的位置来定位,实现复杂且灵活的界面。
常用属性(以子视图的属性为例):
- 相对父容器:
layout_alignParentTop,layout_alignParentBottom,layout_centerInParent等 - 相对其他视图:
layout_above,layout_below,layout_toLeftOf,layout_toRightOf,layout_alignTop,layout_alignBottom等
使用场景:
- 需要精确控制视图相对位置(如标题栏、表单布局)
- 避免过多嵌套,提升性能
示例:
xml
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="标题"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" />
<Button
android:id="@+id/button_ok"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="确定"
android:layout_below="@id/title"
android:layout_alignParentStart="true"
android:layout_marginTop="16dp" />
<Button
android:id="@+id/button_cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="取消"
android:layout_below="@id/title"
android:layout_alignParentEnd="true"
android:layout_marginTop="16dp" />
</RelativeLayout>
3. FrameLayout(帧布局)
特点:所有子视图默认堆叠在左上角(可通过 layout_gravity 调整位置),后添加的视图会覆盖前面的视图。常用于单子视图的场景或作为 Fragment 的容器。
常用属性:
android:foreground:设置前景(如遮罩)android:foregroundGravity:前景位置
使用场景:
- Fragment 容器(
<FrameLayout>常被用作 Fragment 占位) - 叠加效果(如一个按钮浮在图片上方)
- 单视图界面(如加载进度条)
示例:
xml
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/background" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="点击"
android:layout_gravity="center" />
</FrameLayout>
4. ConstraintLayout(约束布局)
特点:通过为每个视图设置水平和垂直约束来定义位置,实现扁平化布局,避免嵌套,支持响应式设计和动画。
常用属性:
layout_constraintStart_toStartOf,layout_constraintEnd_toEndOf:水平约束layout_constraintTop_toTopOf,layout_constraintBottom_toBottomOf:垂直约束layout_constraintHorizontal_bias:水平偏向layout_constraintVertical_bias:垂直偏向layout_constraintWidth_percent:宽度百分比layout_constraintHeight_percent:高度百分比
使用场景:
- 复杂界面,需要保持扁平结构
- 需要适配不同屏幕尺寸和分辨率
- 配合 MotionLayout 实现复杂动画
示例:
xml
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="按钮"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
总结
| 布局类型 | 特点 | 适用场景 | 性能 |
|---|---|---|---|
| LinearLayout | 线性排列,支持权重 | 简单线性界面 | 嵌套过多时性能下降 |
| RelativeLayout | 相对定位,灵活 | 中等复杂界面 | 一次测量,性能较好 |
| FrameLayout | 堆叠视图 | 单视图、Fragment 容器 | 性能优秀 |
| ConstraintLayout | 约束定位,扁平化 | 复杂界面,响应式设计 | 官方推荐,性能优异 |
在实际开发中,应根据界面复杂度、性能要求和适配需求选择合适的布局类型。通常建议优先使用 ConstraintLayout 以降低布局层级,提升性能。