android资源类型以及布局资源的四种常用类型。

10 阅读4分钟

资源类型概览

  • 动画资源

    定义预先确定的动画。
    补间动画保存在 res/anim/ 中,可通过 R.anim 类访问。
    帧动画保存在 res/drawable/ 中,可通过 R.drawable 类访问。

  • 颜色状态列表资源

    定义根据 View 状态而变化的颜色资源。
    保存在 res/color/ 中,可通过 R.color 类访问。

  • 可绘制资源

    使用位图或 XML 定义各种图形。
    保存在 res/drawable/ 中,可通过 R.drawable 类访问。

  • 布局资源

    定义应用界面的布局。
    保存在 res/layout/ 中,可通过 R.layout 类访问。

  • 菜单资源

    定义应用菜单的内容。
    保存在 res/menu/ 中,可通过 R.menu 类访问。

  • 字符串资源

    定义字符串、字符串数组和复数形式,且包括字符串格式和样式设置。
    保存在 res/values/ 中,可通过 R.stringR.array 和 R.plurals 类访问。

  • 样式资源

    定义界面元素的外观和格式。
    保存在 res/values/ 中,可通过 R.style 类访问。

  • 字体资源

    在 XML 中定义字体系列并包含自定义字体。
    保存在 res/font/ 中,可通过 R.font 类访问。

  • 更多资源类型

    将其他原始值定义为静态资源,具体包括:

    • Bool

      包含布尔值的 XML 资源。

    • 颜色

      包含十六进制颜色值的 XML 资源。

    • 尺寸

      包含尺寸值及度量单位的 XML 资源。

    • ID

      为应用资源和组件提供唯一标识符的 XML 资源。

    • 整数

      包含整数值的 XML 资源。

    • 整数数组

      提供整数数组的 XML 资源。

    • 类型化数组

      提供 TypedArray(可用于可绘制对象数组)的 XML 资源。

布局资源

1. LinearLayout:线性布局

LinearLayout 是最直观的布局方式,它将子 View 按照水平(horizontal)或垂直(vertical)方向依次排列,适合结构简单、排列规则的界面。

核心特点:

  • 通过 android:orientation 指定排列方向。
  • 支持 layout_weight 权重属性,可让子 View 按比例分配父容器的剩余空间。
  • 配合 gravity 与 layout_gravity 控制对齐方式。

常用属性:

  • android:orientation:必选,值为 horizontal 或 vertical

  • android:layout_width / android:layout_height:常用 match_parent 或 wrap_content

  • android:gravity:容器内所有子 View 的对齐方式(如 centerbottom)。

  • android:layout_gravity:当前子 View 在父容器中的对齐方式。

  • android:layout_weight:分配剩余空间的权重,通常将对应维度设为 0dp 后生效。

  • 适用场景:

  • 简单的表单界面、列表项(垂直排列)。

  • 工具栏中的按钮组合(水平排列)。

  • 需要按比例分配宽高(如两个按钮平分宽度)的界面。

2. RelativeLayout:相对布局

RelativeLayout 允许子 View 相对于父容器或其他兄弟 View 进行定位,通过声明彼此间的空间关系来构建复杂界面,避免了多层嵌套。

核心特点:

  • 支持相对于父容器的对齐(如 layout_alignParentToplayout_centerInParent)。
  • 支持相对于其他 View 的定位(如 layout_abovelayout_toRightOflayout_alignBottom)。
  • 在 ConstraintLayout 出现之前,是复杂布局的首选方案。

常用属性:

  • 相对于父容器:layout_alignParentToplayout_alignParentBottomlayout_centerHorizontal 等。

  • 相对于兄弟 View:layout_abovelayout_belowlayout_toLeftOflayout_toRightOflayout_alignTop 等。

  • 适用场景:

  • 元素之间需要相互对齐、上下左右关联的界面。

  • 需要减少布局嵌套以优化性能的场景(现代开发中推荐用 ConstraintLayout 替代)。

3. ConstraintLayout:约束布局

ConstraintLayout 是 Google 推出的强大布局容器,通过为子 View 添加"约束"来确定其位置和大小,它结合了 RelativeLayout 的灵活性,并支持扁平化布局,大幅减少嵌套层级,是当前 Android 开发的官方推荐。

编程

核心特点:

  • 通过 layout_constraint[方向]_to[方向]Of 系列属性建立约束。
  • 支持 Guideline(参考线)、Barrier(屏障)、Group(组)等辅助组件,轻松实现响应式设计。
  • 配合 Android Studio 的可视化编辑器,可快速拖拽构建界面,同时自动生成 XML。
  • 支持链(Chains)、偏移(bias)等高级布局特性。

常用属性:

  • app:layout_constraintTop_toTopOf="parent":顶部与父容器顶部对齐。

  • app:layout_constraintLeft_toRightOf="@id/otherView":左侧位于另一个 View 的右侧。

  • app:layout_constraintHorizontal_bias 等控制约束偏移。

  • 适用场景:

  • 几乎所有现代 Android 应用的界面布局,尤其是需要适配多种屏幕尺寸与分辨率时。

  • 希望布局层级扁平化、提升渲染性能的复杂界面。

  • 使用 Android Studio 可视化设计时,自动生成的默认布局。

4. FrameLayout:帧布局

FrameLayout 是最简单的布局容器,它将子 View 按添加顺序依次堆叠在左上角(默认),后添加的 View 会覆盖前面的。通常用于单子视图场景或作为 Fragment 的容器。

核心特点:

  • 结构简单,占用资源少。
  • 子 View 可通过 layout_gravity 调整位置(如 centerbottom)。
  • 支持 android:foreground 设置前景层,常用于加载遮罩或提示效果。

常用属性:

  • android:foreground:设置前景 drawable。

  • android:foregroundGravity:设置前景的对齐方式。

  • 子 View 的 layout_gravity 控制其在容器中的位置。

  • 适用场景:

  • 作为 Fragment 的根布局(如 FragmentContainerView)。

  • 实现叠加效果,例如图片上的文字说明、加载提示层。

  • 仅需容纳单个子视图的简单场景。