一、Android 资源类型概览
在 Android 开发中,资源(Resources)是指应用中非代码部分的内容,比如图片、字符串、颜色等。资源主要放在 res/ 目录下,根据类型有不同的子目录。常见资源类型如下:
-
布局资源(layout)
- 放在
res/layout/目录。 - 描述界面的结构和UI元素。
- 文件通常是 XML 格式。
- 例子:
activity_main.xml。
- 放在
-
值资源(values)
-
放在
res/values/目录。 -
用于定义常量、字符串、尺寸、颜色、样式等。
-
常见文件:
strings.xml— 字符串资源colors.xml— 颜色资源dimens.xml— 尺寸资源styles.xml— 样式/主题
-
-
图片资源(drawable)
-
放在
res/drawable/或不同分辨率的文件夹drawable-hdpi/等。 -
支持的类型:
- Bitmap 图片(PNG、JPG、WebP)
- XML 资源(Shape、Selector、LayerList 等)
-
用于按钮背景、图标、图像等。
-
-
菜单资源(menu)
- 放在
res/menu/ - 定义应用的菜单界面,如选项菜单、上下文菜单。
- 也是 XML 文件。
- 放在
-
动画资源(anim / animator)
res/anim/:补间动画(Tween Animation)XML 文件。res/animator/:属性动画(Property Animation)XML 文件。- 用于控件动画或过渡效果。
-
颜色资源(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>
-
-
原始文件资源(raw)
- 放在
res/raw/ - 可以存放音频、视频、文本文件等,直接按原始形式读取。
- 例如 MP3、JSON 文件。
- 放在
-
字体资源(font)
- 放在
res/font/ - 可定义自定义字体,并通过 XML 或代码引用。
- 放在
-
XML 通用资源(xml)
- 放在
res/xml/ - 用于存放各种自定义 XML 配置,如 Preference(设置页面)、网络配置等。
- 放在
-
其他资源
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_alignParentTop、layout_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:现代推荐,布局灵活且性能好。