Android布局资源的四种常用类型

8 阅读3分钟

一、Android 资源类型概览

在 Android 开发中,资源(Resources)是指应用中非代码部分的内容,比如图片、字符串、颜色等。资源主要放在 res/ 目录下,根据类型有不同的子目录。常见资源类型如下:

  1. 布局资源(layout)

    • 放在 res/layout/ 目录。
    • 描述界面的结构和UI元素。
    • 文件通常是 XML 格式。
    • 例子:activity_main.xml
  2. 值资源(values)

    • 放在 res/values/ 目录。

    • 用于定义常量、字符串、尺寸、颜色、样式等。

    • 常见文件:

      • strings.xml — 字符串资源
      • colors.xml — 颜色资源
      • dimens.xml — 尺寸资源
      • styles.xml — 样式/主题
  3. 图片资源(drawable)

    • 放在 res/drawable/ 或不同分辨率的文件夹 drawable-hdpi/ 等。

    • 支持的类型:

      • Bitmap 图片(PNG、JPG、WebP)
      • XML 资源(Shape、Selector、LayerList 等)
    • 用于按钮背景、图标、图像等。

  4. 菜单资源(menu)

    • 放在 res/menu/
    • 定义应用的菜单界面,如选项菜单、上下文菜单。
    • 也是 XML 文件。
  5. 动画资源(anim / animator)

    • res/anim/:补间动画(Tween Animation)XML 文件。
    • res/animator/:属性动画(Property Animation)XML 文件。
    • 用于控件动画或过渡效果。
  6. 颜色资源(color)

    • 放在 res/color/

    • 可定义单一颜色值或颜色状态列表(StateList)。

    • XML 示例:

      <selector xmlns:android="http://schemas.android.com/apk/res/android">
          <item android:state_pressed="true" android:color="#FF0000"/>
          <item android:color="#00FF00"/>
      </selector>
      
  7. 原始文件资源(raw)

    • 放在 res/raw/
    • 可以存放音频、视频、文本文件等,直接按原始形式读取。
    • 例如 MP3、JSON 文件。
  8. 字体资源(font)

    • 放在 res/font/
    • 可定义自定义字体,并通过 XML 或代码引用。
  9. XML 通用资源(xml)

    • 放在 res/xml/
    • 用于存放各种自定义 XML 配置,如 Preference(设置页面)、网络配置等。
  10. 其他资源

    • res/mipmap/:主要用于应用图标,支持不同分辨率。
    • res/interpolator/:动画插值器。
    • res/transition/:场景过渡动画。

二、布局资源(layout)常用四种类型

布局资源定义界面元素的排列方式,Android 提供了多种 布局容器。四种最常用的布局类型是:

1. LinearLayout(线性布局)

  • 特点

    • 控件按 水平或垂直方向 排列。
    • 方向由 android:orientation="horizontal|vertical" 决定。
    • 可以通过 layout_weight 分配空间。
  • 优点

    • 简单易用,控件排列有序。
  • 缺点

    • 多层嵌套可能导致性能下降。
  • 典型用法

    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <Button android:text="按钮1"/>
        <Button android:text="按钮2"/>
    </LinearLayout>
    

2. RelativeLayout(相对布局)

  • 特点

    • 控件相对于父容器或其他控件位置排列。
    • 通过 layout_alignParentToplayout_below 等属性控制。
  • 优点

    • 布局灵活,不必使用过多嵌套。
  • 缺点

    • 复杂布局时,属性较多,阅读难度增加。
  • 典型用法

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <TextView
            android:id="@+id/text1"
            android:text="文本"
            android:layout_alignParentTop="true"/>
        <Button
            android:layout_below="@id/text1"
            android:text="按钮"/>
    </RelativeLayout>
    

3. FrameLayout(帧布局)

  • 特点

    • 所有子控件都堆叠在左上角(默认)或指定位置。
    • 常用于显示单个控件或覆盖控件(如弹出层)。
  • 优点

    • 简单高效,适合单个控件或覆盖布局。
  • 缺点

    • 不适合复杂布局。
  • 典型用法

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <ImageView android:src="@drawable/bg"/>
        <TextView android:text="覆盖文字"/>
    </FrameLayout>
    

4. ConstraintLayout(约束布局)

  • 特点

    • 通过 约束(Constraint) 控制控件位置。
    • 可相对于父布局或其他控件定位。
    • 支持复杂布局而不嵌套。
  • 优点

    • 性能优于多层 LinearLayout/RelativeLayout。
    • 通过可视化工具可快速拖拽布局。
  • 缺点

    • 学习曲线稍陡。
  • 典型用法

    <ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <TextView
            android:id="@+id/text1"
            android:text="文本"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintStart_toStartOf="parent"/>
        <Button
            android:text="按钮"
            app:layout_constraintTop_toBottomOf="@id/text1"
            app:layout_constraintStart_toStartOf="parent"/>
    </ConstraintLayout>
    

总结

  • LinearLayout:简单直观,但嵌套多性能差。
  • RelativeLayout:相对位置灵活,但属性多。
  • FrameLayout:单控件或覆盖控件用得好。
  • ConstraintLayout:现代推荐,布局灵活且性能好。