Android 资源管理与四大基础布局全解析 | 从基础到实战

0 阅读13分钟

掘金首发 | 零基础吃透 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 一致)。
  • 屏幕密度匹配规则

第1章 Android基础入门.png

  • 调用方式

    • XML 布局中:@mipmap/ic_launcher(图标)、@drawable/icon(界面图片);
    • Java 代码中:getResources().getDrawable(R.mipmap.ic_launcher)getResources().getDrawable(R.drawable.icon)

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"

1.3 布局资源

布局资源是定义界面控件排列结构的核心,是所有 Android 界面的载体,通过 XML 标签描述控件的位置、大小和嵌套关系。

  • 存放位置res/layout/

  • 核心作用:搭建 Activity、Fragment、自定义 View 的 UI 结构;

  • 调用方式

    • Java 代码中(Activity onCreate):setContentView(R.layout.activity_main)
    • XML 布局中(复用布局):<include layout="@layout/activity_main"/>

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)

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)

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)

二、布局资源通用属性:四大布局的基础

线性、相对、表格、帧四大布局均直接 / 间接继承自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、`bottomright`)

基础语法格式

<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 布局开发最佳实践

  1. 优先使用 XML 编写布局:将布局代码与业务代码解耦,结构更清晰,便于后期修改和适配;
  2. 减少布局嵌套:嵌套层级越多,UI 渲染效率越低,优先使用相对布局 / 帧布局替代多层线性布局;
  3. 合理选择布局:根据界面需求选择对应的布局,避免为了省事只用线性布局;
  4. 慎用硬编码:所有尺寸、颜色、文本均使用资源文件管理,不直接在布局中写固定值;
  5. 权重使用技巧:线性布局使用权重时,务必将对应方向的宽 / 高设为 0dp,确保权重生效。

4.2 核心知识点总结

  1. 6 大资源类型:均存放在res/子目录,通过R类调用,XML 中用@资源类型/资源名,Java 中用getResources()+R.资源类型.资源名,核心是统一管理、解耦代码、方便适配

  2. 四大布局适用场景

    • 线性布局:简单的单行 / 单列布局,需比例分配空间的场景(如底部导航);
    • 相对布局:复杂的相对位置布局,需减少嵌套的场景(如登录页、详情页);
    • 表格布局:规整的行列式界面(如计算器、数据表格);
    • 帧布局:层叠效果的界面(如图片遮罩、霓虹灯、加载弹窗)。

五、最后

Android 的资源管理和基础布局是开发的入门必修课,本文梳理的 6 大资源类型和四大基础布局,覆盖了从静态资源管理到 UI 骨架搭建的所有基础内容,掌握这些知识点,就能独立搭建简单的 Android 应用界面。

后续可在此基础上学习约束布局(ConstraintLayout) (官方推荐的主流布局,整合四大基础布局的优势),以及布局优化、多屏幕适配等进阶内容。如果本文对你有帮助,欢迎点赞收藏;如果有疑问或补充,欢迎在评论区交流~