Android Resource资源管理

1,067 阅读4分钟

1、简介

Resource资源管理是 Android 中非常核心的一部分,它涉及到多个类的协作来完成资源的加载、缓存和配置匹配,相关类报名package: "android.content.res"。其中主要通过 Resources 类(以及 ResourcesImpl)来实现,其他如 AssetManagerConfigurationTypedArray 等类提供了对不同类型资源的访问和管理机制。R.java 则提供了对所有静态资源的引用。通过这些类,Android 能够高效地管理和访问应用的各种资源,并根据设备的配置动态加载适合的资源。

资源是指应用程序中的各种静态内容,例如图像、布局、字符串、颜色、尺寸等。

.2、资源的种类

在Android中,资源可以大致分为以下几类:

  • 字符串资源(String Resources) :通常存储应用中显示的文本,如界面提示、按钮标签等。

    • 文件:res/values/strings.xml
    • 示例:
    • <string name="app_name">MyApp</string>
      
  • 布局资源( Layout Resources) :定义用户界面(UI)的结构,通常是XML文件,用来指定View的排列和组织。

    • 文件:res/layout/activity_main.xml
    • 示例:
    • <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><Button android:id="@+id/button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/app_name"/></LinearLayout>
      
  • 图像资源(Drawable Resources) :可以是位图、XML文件、颜色等,用来显示图形或背景。

    • 文件:res/drawable/
    • 示例:res/drawable/icon.png
  • 颜色资源(Color Resources) :用于定义颜色的XML文件,可以用来设置UI元素的颜色。

    • 文件:res/values/colors.xml
    • 示例:
    • <color name="primary_color">#FF5733</color>
      
  • 尺寸资源(Dimension Resources) :用于定义控件的大小或间距,避免硬编码数值,便于调整和适配不同屏幕密度。

    • 文件:res/values/dimens.xml
    • 示例:
    • <dimen name="margin">16dp</dimen>
      
  • 样式资源(Style Resources) :定义一组外观属性,允许统一配置应用中多个组件的外观。

    • 文件:res/values/styles.xml
    • 示例:
    • <style name="AppTheme"><item name="android:colorPrimary">@color/primary_color</item></style>
      
  • 菜单资源(Menu Resources) :用于定义应用的菜单项。

    • 文件:res/menu/
    • 示例:
    • <menu xmlns:android="http://schemas.android.com/apk/res/android"><item android:id="@+id/menu_item"android:title="@string/menu_title"android:icon="@drawable/icon"/></menu>
      

3、资源的组织结构

Android 项目中的资源文件都放置在res目录下,并根据类型组织在不同的子目录中。常见的目录结构包括:

  • res/values/:存放各种XML资源文件,如strings.xmlcolors.xmldimens.xmlstyles.xml等。
  • res/layout/:存放布局文件(activity_main.xmlfragment_example.xml等)。
  • res/drawable/:存放图片、图标、shape等可绘制资源。
  • res/menu/:存放菜单资源文件。
  • res/raw/:存放原始的文件资源(例如音频、视频文件等)。
  • res/anim/:存放动画资源文件。
  • res/mipmap/:存放图标资源(通常用于应用图标)。

4、多语言和多配置支持

Android的资源管理系统非常强大,可以通过目录和文件名的约定,支持多语言和多配置的适配。

  • 多语言:通过在res/values-<locale>目录下定义不同语言的资源文件来支持多语言。例如:

    • res/values/strings.xml:默认语言(通常是英语)
    • res/values-zh/strings.xml:中文
    • res/values-fr/strings.xml:法语
  • Android会根据设备的语言设置来加载适合的资源文件。

  • 屏幕适配:Android通过资源目录名中的屏幕密度、屏幕尺寸等配置来选择合适的资源。例如:

    • res/drawable-mdpi/:适配中等密度屏幕
    • res/drawable-hdpi/:适配高密度屏幕
    • res/drawable-xhdpi/:适配超高密度屏幕
  • Android会根据设备的屏幕密度自动加载合适的图片资源。

  • 其他配置:Android还支持其他配置的适配,比如方向、屏幕大小、主题等。例如:

    • res/values-large/:适配大屏幕设备
    • res/values-land/:适配横屏设备

4、资源的访问方式

在Android中,资源通过ID进行访问。每个资源都有一个唯一的整数ID,Android系统会自动为每个资源分配一个ID。开发者可以通过R类来引用资源,R类是Android编译工具生成的,包含了应用中所有资源的引用。常见的访问方式包括:

  • 通过 R 类访问资源
String text= getResources().getString(R.string.app_name);  // 获取字符串Drawableicon= getResources().getDrawable(R.drawable.icon);  // 获取图片资源
  • 通过 Context 访问资源Context提供了getResources()方法,用来获取资源管理器,进而获取资源。
  • 通过 XML 引用: 在布局文件、样式文件等XML文件中,资源的引用一般是通过@resource_type/resource_name来进行的。

5、动态资源加载

在某些情况下,可能需要在运行时动态加载资源。例如,动态设置界面语言、加载特定配置的资源等。可以使用AssetManager来访问assets目录中的文件,或者使用getResources()来访问资源。

6、总结

Android资源管理系统是Android开发的核心组成部分之一,它提供了一种结构化的方式来组织、管理和访问应用中的各种资源。通过合理利用资源的分离、动态加载和多配置支持,开发者能够更高效地开发跨平台的、适应不同设备和语言的应用。

7、参考

developer.android.com/guide/topic…