Android 资源类型概述

14 阅读4分钟

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:orientationhorizontal(水平)或 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_alignParentToplayout_alignParentBottomlayout_centerInParent 等
  • 相对其他视图:layout_abovelayout_belowlayout_toLeftOflayout_toRightOflayout_alignToplayout_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_toStartOflayout_constraintEnd_toEndOf:水平约束
  • layout_constraintTop_toTopOflayout_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 以降低布局层级,提升性能。