android中四种常用布局资源详细介绍

7 阅读4分钟

一、Android 资源类型全览

Android 应用中的资源存放在 res/ 目录下,按不同类型分属不同子目录。主要资源类型包括:

  1. 动画资源anim/):存放补间动画(Tween Animation)文件。
  2. 属性动画资源animator/):存放属性动画(Property Animation)文件。
  3. 颜色资源color/values/colors.xml):定义颜色值,支持状态列表。
  4. 可绘制资源drawable/):包括图片、形状(Shape)、选择器(Selector)、九宫格等图形资源。
  5. 布局资源layout/):定义用户界面的结构。
  6. 菜单资源menu/):定义选项菜单、上下文菜单等。
  7. 字符串资源values/strings.xml):存放文本字符串,支持多语言国际化。
  8. 样式资源values/styles.xml):定义控件的外观样式。
  9. 尺寸资源values/dimens.xml):定义长度、大小等数值(如 dp、sp)。
  10. 数组资源values/arrays.xml):存放字符串数组、整型数组等。
  11. 原始资源raw/):存放任意原始文件(如音频、视频),通过资源 ID 访问。
  12. 字体资源font/):存放自定义字体文件(.ttf、.otf)。
  13. 过渡资源transition/):定义场景切换时的过渡动画。
  14. XML 资源xml/):存放任意 XML 配置文件,用于配置系统行为或自定义配置。

二、四种常用布局资源详细介绍

布局资源位于 res/layout/ 目录下,每个文件定义一个界面结构。以下是四种最常用的布局类型:

1. LinearLayout(线性布局)

特点:

  • 将所有子视图按照水平或垂直方向线性排列。
  • 通过 orientation 属性指定排列方向。
  • 支持 layout_weight(权重)属性,用于按比例分配父容器的剩余空间。
  • 如果嵌套过多,可能导致性能下降。

核心属性:

  • orientation:设置为 horizontal(水平)或 vertical(垂直)。
  • gravity:控制子视图在布局内的对齐方式。
  • layout_weight:分配剩余空间的比例,通常配合宽度或高度设为 0dp 使用。

适用场景:

  • 简单的表单布局,如登录界面中的输入框和按钮。
  • 横向或纵向的工具栏。
  • 使用权重实现等比例分割屏幕的布局。

2. RelativeLayout(相对布局)

特点:

  • 子视图通过相对位置进行定位,可以相对于父容器,也可以相对于其他兄弟视图。
  • 布局灵活性高,能够减少不必要的布局嵌套。
  • 从 Android 7.0(API 24)开始,Google 更推荐使用 ConstraintLayout,但 RelativeLayout 在简单场景中仍然适用。

核心属性:

  • 相对于父容器的属性:layout_alignParentToplayout_centerHorizontallayout_centerInParent 等。
  • 相对于其他控件的属性:layout_toRightOflayout_belowlayout_alignStart 等。

适用场景:

  • 需要控件之间精确相对定位的界面,例如标题栏居中、按钮位于某个控件下方。
  • 在不引入复杂约束的前提下,希望减少布局层级。

3. ConstraintLayout(约束布局)

特点:

  • 通过约束(constraints)定义每个子视图的位置关系,类似于 RelativeLayout 的升级版。
  • 支持完全扁平化布局,避免了多层嵌套导致的性能问题。
  • 与 Android Studio 的可视化编辑器配合良好,支持拖拽式设计。
  • 提供链条(Chains)、屏障(Barriers)、引导线(Guidelines)等高级功能,方便实现复杂布局和响应式设计。

核心属性:

  • 约束类属性,如 layout_constraintStart_toStartOflayout_constraintTop_toBottomOf 等。
  • 偏移量:layout_constraintHorizontal_biaslayout_constraintVertical_bias 控制视图在约束空间中的位置比例。
  • 链条样式:layout_constraintHorizontal_chainStyle 等,用于控制一组控件在链条中的分布方式。

适用场景:

  • 现代 Android 应用的根布局首选。
  • 界面复杂但要求布局扁平化、性能较高的场景。
  • 需要适配不同屏幕尺寸的响应式界面。

4. FrameLayout(帧布局)

特点:

  • 最简单的布局容器,所有子视图默认堆叠在左上角,后添加的视图会覆盖在前面的视图之上。
  • 可以通过 layout_gravity 属性调整子视图在容器内的位置。
  • 通常只包含一个子视图,常用于作为 Fragment 的容器,或用于实现简单的叠加效果。

核心属性:

  • foreground:设置前景图形(如遮罩)。
  • foregroundGravity:设置前景图形的对齐方式。

适用场景:

  • 作为 Fragment 的容器,例如在 Activity 中动态替换 Fragment
  • 实现叠加效果,如图片上方显示文字。
  • 需要简单堆叠但不需要自动排列布局的场景。

总结:LinearLayout 适合简单线性排列,RelativeLayout 用于相对定位,ConstraintLayout 是当前主流的强大布局,能够应对大部分复杂界面且性能优秀,而 FrameLayout 则常用于单子视图或 Fragment 容器场景。实际开发中,根据界面复杂度和适配需求选择合适的布局类型,可以有效提升开发效率和运行性能。