专栏名称: 郭霖
Android技术分享平台,每天都有优质技术文章推送。你还可以向公众号投稿,将自己总结的技术心得分享给大家。
目录
相关文章推荐
鸿洋  ·  ANR?谁控制了触发时间? ·  5 天前  
郭霖  ·  提升 WebView ... ·  1 周前  
郭霖  ·  Android常见获取设备标识方法现状 ·  1 周前  
stormzhang  ·  胖东来的「另类」 ·  6 天前  
51好读  ›  专栏  ›  郭霖

Android Resource资源管理

郭霖  · 公众号  · android  · 2024-12-02 08:00

正文



/   今日科技快讯   /

近日,清华大学智能产业研究院团队打造的首家“AI医院”Agent Hospital正在进行内测,将于年底正式上线,并于明年上半年对公众开放。此外,一个完全由医生团队发起并主创参与研发、被“喂”了六千余本国内外医学教材的AI医学大模型,已在上海市东方医院门急诊、重症医学科和住院部上岗。

/   作者简介   /

大家周一好,新的一周我们继续努力!

本篇文章转自为码消得人憔悴的博客,文章主要分享了如何使用Android Resource资源管理,相信会对大家有所帮助!

原文地址:
https://juejin.cn/post/7442182627661168649

/   简介   /

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

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

/   资源的种类   /

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

字符串资源(String Resources)

通常存储应用中显示的文本,如界面提示、按钮标签等。

文件

res/values/strings.xml

示例

"app_name">MyApp

布局资源( 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">#FF5733color>

尺寸资源(Dimension Resources)

用于定义控件的大小或间距,避免硬编码数值,便于调整和适配不同屏幕密度。

文件

res/values/dimens.xml

示例

<dimen name="margin">16dpdimen>

样式资源(Style Resources)

定义一组外观属性,允许统一配置应用中多个组件的外观。

文件

res/values/styles.xml

示例

<style name="AppTheme">
  <item name="android:colorPrimary">@color/primary_coloritem>
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>

/   资源的组织结构   /

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

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

/   多语言和多配置支持   /

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

多语言

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

  • 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/:适配横屏设备

/   资源的访问方式   /

在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来进行的。

/   动态资源加载   /

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

/   总结   /

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

推荐阅读:
我的新书,《第一行代码 第3版》已出版!
原创:写给初学者的Jetpack Compose教程,edge-to-edge全面屏体验
一文了解 Gradle 插件

欢迎关注我的公众号
学习技术或投稿


长按上图,识别图中二维码即可关注