Android布局资源详解

0 阅读6分钟

android资源类型

在Android开发中,res/目录下的资源管理是核心基础。

1. 图片资源

图片资源通常存放在res/drawable目录及其密度变体目录(如drawable-hdpidrawable-xhdpi等)中。

核心知识点

  • 屏幕适配:为了适应不同屏幕密度的设备,需要为同一张图片提供多个分辨率的版本,分别放入对应的drawable-density文件夹。系统会根据设备屏幕密度自动加载最匹配的图片。 image.png
  • 支持格式:主要支持.png(无损,首选)、.jpg(有损)以及Android 5.0后引入的矢量图(.xml格式,基于VectorDrawable),矢量图可以无限缩放而不失真,有助于减小APK体积。
  • 引用方式
  • (1)通过Java代码调用图片资源文件
  • 在Activity中可以通过getResources().getDrawable()方法调用图片资源文件

//调用mipmap文件夹中资源文件 getResources().getDrawable(R.mipmap.ic_launcher);

//调用以drawable开头的文件夹中的资源文件 getResources().getDrawable(R.drawable.icon);

(2) 在XML布局文件中调用图片资源

@mipmap/ic_launcher //调用mipmap文件夹中的资源文件

@drawable/icon //调用以drawable开头的文件夹中的资源文件

2. 主题和样式资源

样式(Style)和主题(Theme)资源定义在res/values/styles.xml文件中,用于统一管理控件或界面的外观属性。

核心知识点

  • 样式(Style) :针对单个View控件的属性集合。例如,定义一个包含文字大小、颜色的样式,可以让多个TextView复用该样式,避免重复代码
  • 主题(Theme) :针对整个Activity或应用的样式集合。主题不仅可以控制文字颜色、大小,还可以控制窗口背景、标题栏、状态栏等。
  • 继承机制:支持样式继承,可以基于系统自带主题(如Theme.AppCompat.Light)进行扩展,只需修改特定的属性值即可实现自定义外观
  • 设置主题
  • (1)在AndroidManifest.xml文件中设置主题 android:theme ="@style/AppTheme"
  • (2)在Java代码中设置主题 setTheme(R.style.AppTheme);
  • 设置样式
  • (1)在XML布局文件,如res/layout文件夹中的activity_main.xml中引用样式 style="@style/textViewSytle"

3. 布局资源

布局资源是Android UI界面的“骨架”,存放在res/layout/目录下,通常以XML文件形式定义。

  • 调用布局资源的方式有2种:

(1)通过Java代码调用布局资源文件

//在Activity的onCreate()方法中调用activity_main.xml布局文件 setContentView(R.layout.activity_main);

(2)在XML布局文件中调用布局资源文件

//在XML布局文件中调用activity_main.xml布局文件

<include layout="@layout/activity_main"/>

4. 字符串资源

字符串资源存放在res/values/strings.xml文件中。

字符串标签<string></string>定义字符串的标签

<resources> <string name="app_name">字符串</string> </resources>

  • 调用字符串资源的方式有2种:
  • (1)通过Java代码调用字符串资源 getResources().getString(R.string.app_name);

(2)在XML布局文件中调用字符串资源 @string/app_name

5. 颜色资源

颜色资源存放在res/values/colors.xml文件中。

  • 颜色格式:支持RGB、ARGB格式(8位十六进制,如#FF0000为红色,#FFFF0000为带透明度的红色)
  • 定义与引用:定义颜色值(<color name="colorPrimary">#3F51B5</color>)。
  • 颜色标签: <color></color>:定义颜色的标签

<resources> <color name="colorPrimary">#3F51B5</color> </resources>

  • 引用方式与字符串类似:(1)在XML布局文件中调用尺寸资源@color/colorPrimary

(2)通过Java代码调用尺寸资源R.color.colorPrimary

6. 尺寸资源

尺寸资源存放在res/values/dimens.xml文件中。

  • 单位

    • dp(密度无关像素) :推荐用于控件宽度、高度、边距。保证在不同屏幕密度的设备上显示的物理尺寸大致相同。
    • sp(缩放无关像素) :推荐用于文字大小。它会随着用户在系统设置中调整字体大小偏好而自动缩放,保证无障碍体验。
  • 尺寸的标签:

<dimen></dimen>:定义尺寸的标签

<resources> <dimen name="activity_horizontal_margin">16dp</dimen> </resources>

  • 引用方式:

(1)通过Java代码调用尺寸资源 getResources().getDimension(R.dimen.activity_horizontal_margin);

(2)在XML布局文件中调用尺寸资源 @dimen/activity_horizontal_margin

二、四种常用布局资源详细介绍

1. 线性布局(LinearLayout)

核心特征:所有子控件按照单一方向(水平或垂直)依次排列,不会自动换行,是最基础、最常用的布局方式

核心属性

  • android:orientation:设置排列方向,vertical(垂直)或horizontal(水平)
  • android:layout_weight:设置权重,让子控件按比例分配父布局的剩余空间,可实现等比例自适应效果

适用场景:表单界面、列表项、导航栏、按钮组、简单的垂直/水平排版界面

示例代码

<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" />
</LinearLayout>

2. 相对布局(RelativeLayout)

核心特征:通过指定子控件相对于父容器或其他兄弟控件的位置来进行定位,不限制固定的排列方向,灵活性极高

核心属性

  • 相对于父容器android:layout_centerInParent(居中)、android:layout_alignParentBottom(贴紧底部)等
  • 相对于兄弟控件android:layout_below(在某控件下方)、android:layout_toRightOf(在某控件右侧)等

适用场景:登录页面、个人中心、详情页、需要灵活定位控件的复杂界面

示例代码

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    
    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:text="标题" />
    
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/title"
        android:layout_alignLeft="@id/title"
        android:text="描述信息" />
</RelativeLayout>

3. 帧布局(FrameLayout)

核心特征:最简单的布局容器,所有子控件默认堆叠在左上角,后添加的控件会覆盖在先添加的控件之上

核心属性

  • android:layout_gravity:设置子控件在容器内的对齐方式(如居中、靠右等)

适用场景:作为Fragment的容器、图片叠加层、角标、加载动画、简单的叠加式界面

示例代码

<FrameLayout
    android:id="@+id/fragment_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

4. 表格布局(TableLayout)

核心特征:按照行和列的形式组织控件,结构类似于HTML中的<table>标签,排版整齐规范

核心功能

  • stretchColumns:设置某些列为“可拉伸”,填满屏幕剩余宽度
  • shrinkColumns:设置某些列为“可收缩”,防止内容溢出
  • collapseColumns:隐藏指定的列

适用场景:计算器界面、数据统计表、日历、规整的网格类界面

示例代码

xml

<TableLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:stretchColumns="1">
    
    <TableRow>
        <TextView android:text="姓名:" />
        <EditText android:hint="请输入姓名" />
    </TableRow>
    
    <TableRow>
        <TextView android:text="年龄:" />
        <EditText android:hint="请输入年龄" />
    </TableRow>
</TableLayout>