Android 资源类型概述

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

ini 复制代码
<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

ini 复制代码
<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

ini 复制代码
<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

ini 复制代码
<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 以降低布局层级,提升性能。

相关推荐
雨白1 天前
NDK 初探:基于 C++ 实现参数哈希与签名校验
android
程序员正茂1 天前
Android studio中初步使用OpenCV库
android·opencv
紫_龙1 天前
window 维护多版本Android studio
android·ide·android studio
杉氧1 天前
KMP 自动化之路 (4):iOS 自动化构建与签名 —— 攻克最硬的骨头
android·架构·android jetpack
通玄1 天前
Jetpack Compose 入门系列(十):Paging 3 分页加载
android
vistaup1 天前
Android studio 历史版本
android·ide·android studio
hunterandroid1 天前
DataStore 工程化实践:迁移、并发更新与异常恢复
android·前端
程序员-珍1 天前
报错下载android sdk失败
android·java
齊家治國平天下1 天前
AAOS 电源管理深度解析:休眠/唤醒/功耗优化
android·车载系统·aaos·aosp·电源管理·休眠唤醒·carpowermanager
qq3621967051 天前
安卓大版本升级后APK不兼容怎么办?2026跨版本更新指南
android