掘金首发 | 零基础吃透 Android 资源体系,四大布局从属性到实战一键掌握
在 Android 开发中,资源(Resource) 是将静态内容与业务代码解耦的核心,所有非代码的 UI 素材、配置信息都归为资源并统一管理在res/目录下。合理的资源管理不仅能让代码结构更清晰、降低维护成本,还能轻松实现多屏幕、多主题的适配;而布局资源作为 UI 的核心载体,更是搭建所有 Android 界面的基础。
本文将基于 Android 开发基础教程,完整梳理 6 大核心资源类型(存放位置、定义方式、XML/Java 双端调用方法),并针对布局资源的四大常用类型(线性、相对、表格、帧布局),从核心属性、语法格式到实战案例进行深度解析,所有内容贴合基础开发实际,零基础也能轻松理解。
一、Android 核心资源类型全解析
Android 的资源均按功能分类存放在res/目录的子文件夹中,系统会自动为每个资源生成唯一的R类索引,开发中可通过R.资源类型.资源名快速调用,无需硬编码。以下是开发中最常用的 6 大核心资源类型,涵盖所有基础静态内容管理。
1.1 图片资源
图片资源是 Android 界面的视觉素材,支持png、jpg、gif、.9.png等格式,按用途分为应用图标和界面图片,分别存放在不同目录,系统会根据设备屏幕密度自动匹配对应资源。
-
存放位置:
- 应用图标:
res/mipmap-xxx/(按密度分 mdpi/hdpi/xhdpi/xxhdpi/xxxhdpi); - 界面图片:
res/drawable-xxx/(密度分类与 mipmap 一致)。
- 应用图标:
-
屏幕密度匹配规则:
-
调用方式:
- XML 布局中:
@mipmap/ic_launcher(图标)、@drawable/icon(界面图片); - Java 代码中:
getResources().getDrawable(R.mipmap.ic_launcher)、getResources().getDrawable(R.drawable.icon)。
- XML 布局中:
1.2 主题和样式资源
主题和样式用于统一管理 UI 的格式属性,减少重复代码,二者均定义在styles.xml中,仅作用范围不同:样式作用于单个控件,主题作用于整个 Activity / 应用。
- 存放位置:
res/values/styles.xml; - 定义标签:
<style>(定义主题 / 样式)、<item>(设置具体属性); - 示例定义:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<style name="textViewStyle">
<item name="android:textSize">18sp</item>
<item name="android:textColor">#FF0000</item>
</style>
-
调用方式:
- 主题:XML 中(AndroidManifest.xml)
android:theme="@style/AppTheme",Java 代码中setTheme(R.style.AppTheme); - 样式:XML 布局中控件属性
style="@style/textViewStyle"。
- 主题:XML 中(AndroidManifest.xml)
1.3 布局资源
布局资源是定义界面控件排列结构的核心,是所有 Android 界面的载体,通过 XML 标签描述控件的位置、大小和嵌套关系。
-
存放位置:
res/layout/; -
核心作用:搭建 Activity、Fragment、自定义 View 的 UI 结构;
-
调用方式:
- Java 代码中(Activity onCreate):
setContentView(R.layout.activity_main); - XML 布局中(复用布局):
<include layout="@layout/activity_main"/>。
- Java 代码中(Activity onCreate):
1.4 字符串资源
所有界面的文本内容均建议放在字符串资源中,便于多语言适配和统一修改,避免硬编码文本。
- 存放位置:
res/values/strings.xml; - 定义标签:
<string>,示例:
<resources>
<string name="app_name">Android资源与布局</string>
<string name="tv_text">Hello World</string>
</resources>
-
调用方式:
- XML 布局中:
android:text="@string/tv_text"; - Java 代码中:
getResources().getString(R.string.app_name)。
- XML 布局中:
1.5 颜色资源
统一管理应用的配色体系,支持 ARGB 格式的颜色值,避免相同颜色多次编写不同值。
- 存放位置:
res/values/colors.xml; - 定义标签:
<color>,示例:
<resources>
<color name="colorPrimary">#3F51B5</color>
<color name="red">#FF0000</color>
</resources>
-
颜色值格式:Android 颜色值以
#开头,支持 4 种形式:#RGB、#ARGB、#RRGGBB、#AARRGGBB(A 为透明度,R/G/B 为红 / 绿 / 蓝); -
调用方式:
- XML 布局中:
android:textColor="@color/red"; - Java 代码中:
getResources().getColor(R.color.colorPrimary)。
- XML 布局中:
1.6 尺寸资源
管理界面中所有的尺寸值(控件宽高、边距、文字大小等),便于多屏幕适配,核心使用dp(控件尺寸)和sp(文字大小)单位。
- 存放位置:
res/values/dimens.xml(无则自行创建); - 定义标签:
<dimen>,示例:
<resources>
<dimen name="activity_margin">16dp</dimen>
<dimen name="tv_size">18sp</dimen>
</resources>
-
常用尺寸单位:
dp:设备独立像素,与屏幕密度无关,推荐用于控件尺寸 / 边距;sp:比例像素,随用户字体设置缩放,推荐用于文字大小;px:像素,与屏幕密度相关,不推荐直接使用;- 其他:
in(英寸)、pt(磅)、mm(毫米)(物理单位,极少使用)。
-
调用方式:
- XML 布局中:
android:margin="@dimen/activity_margin"; - Java 代码中:
getResources().getDimension(R.dimen.tv_size)。
- XML 布局中:
二、布局资源通用属性:四大布局的基础
线性、相对、表格、帧四大布局均直接 / 间接继承自ViewGroup,因此拥有统一的通用属性,这些属性是编写所有布局的基础,需先熟练掌握。
2.1 通用属性一览表
| 属性名称 | 功能描述 |
|---|---|
android:id | 设置布局 / 控件的唯一标识,格式为@+id/xxx,用于代码中获取控件 / 布局对象 |
android:layout_width | 设置宽度,可选match_parent/wrap_content/ 具体尺寸(如 50dp) |
android:layout_height | 设置高度,可选值与宽度一致 |
android:background | 设置背景,可引用图片资源(@drawable/xxx)或颜色资源(@color/xxx) |
android:layout_margin | 设置当前布局 / 控件与外部(屏幕 / 其他控件)的间距,可单独设置marginLeft等 |
android:padding | 设置当前布局 / 控件与内部子控件的间距,可单独设置paddingTop等 |
2.2 宽高核心值说明
layout_width/height的三个核心值是布局开发的关键,需明确其区别:
match_parent:从 API 8 开始引入,让布局 / 控件填充父容器的对应维度,语义化更强,推荐使用;fill_parent:早期 Android 版本的属性,与match_parent功能完全一致,现已被替代;wrap_content:让布局 / 控件的尺寸刚好包裹住内部内容,随内容变化自适应。
三、四大基础布局深度解析
布局资源是 Android 界面的骨架,线性、相对、表格、帧布局是基础开发中最常用的四种,分别适用于不同的 UI 场景,掌握它们的核心属性和实战用法,就能搭建绝大多数基础界面。
所有布局均推荐在 XML 文件中编写(解耦布局与业务代码,结构更清晰),同时也支持 Java 代码动态创建,下文会结合核心属性 + 语法格式 + 实战案例逐一讲解。
3.1 线性布局(LinearLayout)—— 按方向线性排列
核心介绍
线性布局是最基础的布局类型,将子控件按单一方向(水平 / 垂直)依次排列,子控件之间不会重叠,通过权重(weight) 可实现剩余空间的比例分配,是新手入门的首选布局。
核心专属属性
线性布局在通用属性基础上,新增两个核心专属属性,决定子控件的排列规则:
| 属性名称 | 功能描述 |
|---|---|
android:orientation | 核心属性,设置排列方向,可选vertical(垂直,默认)/horizontal(水平) |
android:layout_weight | 子控件属性,按权重分配父布局的剩余空间,属性值为整型,需将对应方向宽 / 高设为 0dp |
基础语法格式
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"> <!-- 排列方向 -->
<!-- 子控件 -->
<View
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"/>
</LinearLayout>
实战案例 1:权重分配(1:1:2 按钮布局)
实现水平方向 3 个按钮按1:1:2的比例分配宽度,关键:按钮宽度设为 0dp,权重分别为 1、1、2:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="按钮1"/>
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="按钮2"/>
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:text="按钮3"/>
</LinearLayout>
注意:使用权重时,对应方向的宽 / 高必须设为 0dp,否则权重属性会失效。
实战案例 2:仿动物连连看界面
通过多层垂直 + 水平线性布局嵌套,实现连连看的格子排列:根布局为垂直线性布局,嵌套 3 个水平线性布局,每个水平布局放置 4 个图片按钮,核心是利用线性布局的方向属性实现规整的行列排列。
3.2 相对布局(RelativeLayout)—— 基于相对位置定位
核心介绍
相对布局是灵活性极高的布局类型,通过子控件之间 / 子控件与父布局的相对位置关系排列控件,无需按固定方向排列,可有效减少布局嵌套,是替代多层线性布局的优选。
核心专属属性
相对布局的核心属性均为子控件属性,分为「与父布局的相对关系」和「与其他子控件的相对关系」两类,使用时需为目标控件设置唯一id:
| 类别 | 属性名称 | 功能描述 |
|---|---|---|
| 与父布局的关系 | android:layout_centerInParent | 位于父布局水平 + 垂直居中 |
android:layout_centerHorizontal | 位于父布局水平居中 | |
android:layout_alignParentTop | 与父布局顶端对齐 | |
| 与子控件的关系 | android:layout_below/@id/xxx | 位于目标控件下方 |
android:layout_toRightOf/@id/xxx | 位于目标控件右侧 | |
android:layout_alignTop/@id/xxx | 与目标控件顶端对齐 |
基础语法格式
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/tv1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/tv1"
android:layout_centerHorizontal="true"/>
</RelativeLayout>
实战案例 1:多按钮相对定位
实现 “按钮 1 居左、按钮 2 在按钮 1 右侧、按钮 3 在按钮 2 下方居中” 的布局,利用相对定位属性替代线性布局嵌套,简化结构。
实战案例 2:音乐播放器界面
通过相对布局实现音乐播放器的经典界面:播放 / 暂停按钮居中,上一曲 / 下一曲按钮分别在左右两侧,进度条在按钮下方,所有控件通过相对定位属性排列,无需嵌套,布局层级更扁平。
3.3 表格布局(TableLayout)—— 按行列管理控件
核心介绍
表格布局采用行、列的形式管理子控件,通过TableRow定义行,每行中添加的子控件即为列,支持列的拉伸、收缩、隐藏,非常适合实现规整的行列式界面(如计算器、登录表)。
核心专属属性
表格布局继承自线性布局,因此支持线性布局的所有属性,同时新增列管理的专属属性,分为布局属性(控制列)和子控件属性(控制单元格):
| 类别 | 属性名称 | 功能描述 |
|---|---|---|
| 布局属性 | android:stretchColumns | 设置指定列自动拉伸,填充剩余空间(值为列索引,从 0 开始) |
android:shrinkColumns | 设置指定列自动收缩,适应屏幕(值为列索引) | |
android:collapseColumns | 设置指定列隐藏(值为列索引) | |
| 子控件属性 | android:layout_column | 设置单元格显示在指定列(值为列索引) |
android:layout_span | 设置单元格占据的列数,默认 1 列 |
基础语法格式
<TableLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:stretchColumns="0,1"> <!-- 0、1列自动拉伸 -->
<TableRow>
<Button android:text="单元格1"/>
<Button android:text="单元格2"/>
</TableRow>
<TableRow>
<Button android:text="跨列单元格" android:layout_span="2"/>
</TableRow>
</TableLayout>
实战案例 1:3 行 3 列表格
通过 3 个TableRow实现 3 行 3 列布局,其中部分单元格跨列,利用layout_span属性实现不规则行列排列,适配复杂的表格需求。
实战案例 2:计算器界面
计算器是表格布局的经典应用:根布局为TableLayout,通过 5 个TableRow定义 5 行按钮,数字键、运算符键按行列规整排列,利用stretchColumns让所有按钮自动拉伸,适配不同屏幕尺寸。
3.4 帧布局(FrameLayout)—— 控件层叠排列
核心介绍
帧布局是最轻量的布局类型,为子控件开辟一块空白区域,所有子控件按层叠方式排列,后添加的控件会覆盖在前面的控件之上,默认所有子控件与父布局左上角对齐,适合实现层叠效果(如图片 + 文字遮罩、霓虹灯)。
核心专属属性
帧布局的专属属性主要用于设置前景层(始终显示在所有子控件最上层,适合添加遮罩、加载图标):
| 属性名称 | 功能描述 | |
|---|---|---|
android:foreground | 设置帧布局的前景图像 / 颜色,始终在子控件之上 | |
android:foregroundGravity | 设置前景层的对齐方式(如center、`bottom | right`) |
基础语法格式
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:foreground="@mipmap/ic_launcher"
android:foregroundGravity="left">
<!-- 子控件层叠排列,后添加的在上层 -->
<Button android:text="按钮1"/>
<Button android:text="按钮2" android:layout_gravity="center"/>
</FrameLayout>
实战案例 1:控件层叠 + 前景图标
实现 “按钮 1 居左、按钮 2 居中覆盖按钮 1、左侧显示前景应用图标” 的效果,体现帧布局的层叠特性和前景属性的用法。
实战案例 2:霓虹灯界面
通过帧布局实现霓虹灯的闪烁效果:在帧布局中放置 5 个大小不同的圆形按钮,按层叠方式居中排列,通过 Java 代码动态修改按钮的背景颜色,实现霓虹灯的交替闪烁,核心利用帧布局的层叠特性让按钮重叠显示。
四、开发最佳实践与核心总结
4.1 布局开发最佳实践
- 优先使用 XML 编写布局:将布局代码与业务代码解耦,结构更清晰,便于后期修改和适配;
- 减少布局嵌套:嵌套层级越多,UI 渲染效率越低,优先使用相对布局 / 帧布局替代多层线性布局;
- 合理选择布局:根据界面需求选择对应的布局,避免为了省事只用线性布局;
- 慎用硬编码:所有尺寸、颜色、文本均使用资源文件管理,不直接在布局中写固定值;
- 权重使用技巧:线性布局使用权重时,务必将对应方向的宽 / 高设为 0dp,确保权重生效。
4.2 核心知识点总结
-
6 大资源类型:均存放在
res/子目录,通过R类调用,XML 中用@资源类型/资源名,Java 中用getResources()+R.资源类型.资源名,核心是统一管理、解耦代码、方便适配; -
四大布局适用场景:
- 线性布局:简单的单行 / 单列布局,需比例分配空间的场景(如底部导航);
- 相对布局:复杂的相对位置布局,需减少嵌套的场景(如登录页、详情页);
- 表格布局:规整的行列式界面(如计算器、数据表格);
- 帧布局:层叠效果的界面(如图片遮罩、霓虹灯、加载弹窗)。
五、最后
Android 的资源管理和基础布局是开发的入门必修课,本文梳理的 6 大资源类型和四大基础布局,覆盖了从静态资源管理到 UI 骨架搭建的所有基础内容,掌握这些知识点,就能独立搭建简单的 Android 应用界面。
后续可在此基础上学习约束布局(ConstraintLayout) (官方推荐的主流布局,整合四大基础布局的优势),以及布局优化、多屏幕适配等进阶内容。如果本文对你有帮助,欢迎点赞收藏;如果有疑问或补充,欢迎在评论区交流~