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

相关推荐
JohnnyDeng943 小时前
Android 包体积优化:R8/ProGuard 深度配置
android
qq_452396233 小时前
第六篇:《JMeter逻辑控制器:循环、条件和交替执行》
android·java·jmeter
cwzqf4 小时前
Jectpack Compose项目组件代码分享(1):分页加载组件
android
@北海怪兽5 小时前
SQL常见函数整理 _ STRING_AGG()
android·数据库·sql
鹏晨互联6 小时前
【Compose vs XML:边框内外间距的实现对比】
android·xml
Android系统攻城狮6 小时前
Android tinyalsa深度解析之pcm_plugin_write调用流程与实战(一百七十九)
android·pcm·tinyalsa·android16·音频进阶·android音频进阶
ID_180079054736 小时前
除了JSON,淘宝店铺商品API接口还支持哪些数据格式?
android·数据库
KillerNoBlood7 小时前
2026移动端跨平台开发面经总结
android·算法·flutter·ios·移动开发·鸿蒙·kmp
消失的旧时光-19437 小时前
Android / IoT 面试复盘总结:从 MQTT、TLS 到 JWT 权限体系(标准答案 + 工程理解 + 延伸知识链)
android·物联网·面试
林多8 小时前
【Android】 GPU过度绘制实现原理
android·gpu·性能·实现原理·过度绘制·overdraw