当你写程序的时候应该习惯于把一些程序需要用到的资源,例如图片和字符串,分开并独立地保存在你的程序代码之外,这样你就可以独立地维护这些资源文件。你还应该通过特殊的名字的文件路径,为特定的设备配置提供可替换的资源文件。在运行时,Android会基于现在的配置自动应用合适的资源文件。例如,你可以根据不同的屏幕尺寸或基于语言设置的不同的字符串来提供不同的UI布局。

一旦你将资源文件与程序代码分开保存,你可以通过资源ID号来使用对应的资源文件,这些资源ID在项目的R类中自动生成。关于如何在你的程序里面使用资源,可以看看Accessing Resources。这篇文档将介绍如何在你的Android工程下来组织管理你的资源文件,以及如何给特定的设备配置提供可替代的资源。

Grouping Resource Types/资源文件的分类

在你的工程的res/目录下,每个子目录对应一种类型的资源文件。例如,下面是一个简单工程的文件树状结构。

MyProject/

src/

MyActivity.java

res/

drawable/

icon.png

layout/

main.xml

info.xml

values/

strings.xml

这个例子中你可以看到,res/目录下包含了所有的资源文件(在子目录下):一个图片资源,两个布局资源文件,和一个string资源文件。这个资源目录的名字是非常重要的,如Table1:

表1. 工程res/下面可以支持的资源目录:

目录

资源类型

animator/

定义动画属性(property animations)的XML文件.

anim/

定义补间动画(tween animations)的XML文件. (动画的属性也可以保存在这个目录下,但是animator/目录是用来保存动画属性的并区别开两个目录)

color/

定义了一些colors对应值的XML文件,见Color State List Resource

drawable/

Bitmap文件(.png,.9.png,.jpg,.gif)或者能被编译为drawable类型的XML文件:

·         Bitmap files

·         Nine-Patches(re-sizable bitmaps)State lists

·         Color drawables

·         Shapes

·         Animation drawables

见 Drawable Resources

layout/

定义用户界面布局的XML文件. 见 Layout Resource.

menu/

定义程序menus的XML文件,比如Options Menu,Context Menu,或者Sub Menu.见Menu Resource

raw/

放置任意的文件,必须为原始形式。使用raw InputStream来打开这些资源文件,调用Resources.openRawResource()方法来打开resource ID对应的资源,比如R.raw.filename。

然而,如果你需要访问原始文件名字和文件目录结构,你可以考虑将一些资源文件保存在 assets/ 目录下(而不是res/raw/)。放在assets/下的文件不提供一个资源ID,所以你只能使用 AssetManager来读取它们。

values/

包含一些简单值的XML文件,比如strings,integers,和颜色。

在其他res/子目录下定义的XML资源文件定义的是一个单独的基于XML文件名的资源,在values/目录下的文件描述了多种资源。例如这个目录下的某个资源文件,每个<resources>的子节点定义了一个单独资源。比如,<string>节点创建了一个R.string资源,<color>节点创建了一个R.color资源。

因为每个资源都是使用自己的XML文件定义的,你可以任意命名文件,并在一个文件里面放不同种类的资源。但是,为了清晰可见(for clarity),你也许想要在一个文件里面放置统一的资源类型。例如,下面是这个目录下创建资源文件的俗称约定:

·         arrays.xml:放置资源数组(typed arrays)

·         colors.xml:放置颜色值(color values)

·         dimens.xml:放置长度值(dimension values)

·         strings.xml:放置字符串值(string values)

·         styles.xml:放置样式(styles)

见 String Resource,Style Resource以及 More Resource Types。

xml/

在运行时可以通过调用Resources.getXML()方法来读取该目录下的任意XML文件。各种XML配置文件都必须保存在这里,比如searchable configuration

注意:你不可以直接将资源文件保存在res/目录下—这样做会引起编译错误。

要了解更多关于某种特定资源类型的信息,参见:Resource Types文档

你保存在所有子目录中的资源也就是表 1 中定义的你的默认资源。也就是说,这些资源为您的应用程序定义了默认的设置和内容。然而,不同类型的Android驱动设备需要不同类型的资源。例如,当一个设备有比正常屏幕大的屏,那么你应该提供不同的布局资源来充分利用屏幕剩余的空间。或者,如果设备有不同的语言设置,那么应该提供不同的字符串资源来吧文本翻译到你的用户界面上。为了给不同的设备配置提供不同的资源,除了您的默认资源你还需要提供可替代资源。

Providing Alternative Resources/提供可替换的资源

几乎每个程序都应该给特定的设备配置提供可替换的资源。例如,可以为不同的屏幕尺寸提供可替换的资源,不同的语言提供可替换的字符串。运行时,Android会自动检查当前设备配置并为你的应用加载合适的资源。

要指定一组资源配置的具体方案(To specify configuration-specific alternatives for a set of resources):

  1. 在res/下创建一个新的目录<resources_name>-<config_qualifier>
  • <resources_name>是和默认资源相对应的目录名称(如表1定义)。
  • <config_qualifier>是指定一个配置相应的名称,同时放在这个目录下的资源会在这个配置上使用。你可以附加多个<config_qualifier>。用破折号进行分开(如表 2定义)。

在你新的目录下保存你的可替换资源,这个资源文件必须和默认的资源命名一样

例如,下面是一些默认资源和可替换资源:

res/

drawable/

icon.png

background.png

drawable-hdpi/

icon.png

background.png

这个hdpi表明在这个目录下的资源将会在高分辨率(hign-density)的设备上使用。同时每个drawable目录下的图片根据特定屏幕密度绘制大小,文件名是相同的。这样,你使用引用icon.png和backgrou.png的资源ID是相同的,但是android会根据通过比较可替代资源的目录名称与设备配置信息来选择最合适的drawable下的资源。

Android支持多种配置标识符(qualifiers),你可以给你一个目录名字增加多个标识符(qualifiers),通过破折号分开。Table 2列出了合法的配置标识符(qualifiers),如果你在一个资源目录下使用了多个标识符,则按顺序来决定优先权,这些配置标识符必须按下表列出来的顺序添加到目录名称:

注意:Android中的一些配置标识符是在1.0版本之后加上的,所以并不是任意版本的Android系统都支持表2列出的配置标识符。新的配置标识符都说明了它们是在哪一版本添加的。为了避免任何可能出现的额问题,您应该始终为您的应用程序所使用的资源设置默认值。要了解更多信息,参见Providing the Best Device Compatibility with Resources部分。

【未完待续】

欢迎转载,转载请注明出处:http://www.cnblogs.com/CodeGuy/

转载于:https://www.cnblogs.com/CodeGuy/archive/2011/08/25/2153901.html

Android之Providing Resources(提供资源)相关推荐

  1. 【Android 安装包优化】资源混淆 ( resources.arsc 资源映射表混淆 | resources.arsc 资源映射表二进制格式分析 | 混淆全局字符串池和资源名称字符串池 )

    文章目录 一.resources.arsc 资源映射表 混淆 二.resources.arsc 资源映射表二进制格式分析 三.参考资料 资源混淆时 , 需要修改混淆 resources.arsc 资源 ...

  2. 【Android 安装包优化】资源混淆 ( AAPT2 资源编译工具 | resources.arsc 资源映射表 工作机制 )

    文章目录 一.AAPT2 资源编译工具 二.resources.arsc 资源映射表 工作机制 三.参考资料 一.AAPT2 资源编译工具 资源的编译 , 生成 R.java 文件 , 都是通过 AA ...

  3. 【Android 安装包优化】资源混淆 ( resources.arsc 资源映射表文件格式 | 头文件 数据格式 | 全局字符串池 数据格式 | 包数据 数据格式 | 包头 数据格式 )

    文章目录 一.resources.arsc 资源映射表文件格式 二.头文件 数据格式 三.全局字符串池 数据格式 四.包数据 数据格式 1.包头 数据格式 2.资源类型字符串池 数据格式 3.资源名称 ...

  4. 【Android 安装包优化】资源打包配置 ( resources.arsc 资源映射表 | 配置国际化资源 )

    文章目录 一.resources.arsc 资源映射表 二.配置国际化资源 三.完整 build.gradle 构建脚本示例 四.参考资料 一.resources.arsc 资源映射表 分析 Andr ...

  5. Android Studio(9)--添加应用资源

    添加应用资源 应用程序资源(如位图和布局)组织到每个模块res/目录中的特定于类型的目录中.您还可以添加针对不同设备配置优化的每个文件的替代版本(例如,用于高密度屏幕的高分辨率版本的位图). Andr ...

  6. Android常用的几种资源

    2019独角兽企业重金招聘Python工程师标准>>> Android常用的几种资源 一般资源都是放在res文件夹下的,res文件夹一般包含有values,drawable-ldpi ...

  7. Android中使用官方提供好的功能使用说明(比如系统图库获取),也作为延生学习的学习文档

    这篇文章最核心的就是去学习如何学习Android,如何去使用Android文档. 我们一般在刚开始接触开发的时候,如果遇到无法解决的问题,常常会百度,或者google去寻找答案,比如有个需求是获取系统 ...

  8. android资源管理方式,Android资源管理利器Resources和AssetManager

    Android开发 Android手机开发 Android应用开发 Android资源管理利器Resources和AssetManager 前言  : Android工程在运行的时候往往需要引用资源. ...

  9. Android Studio 实现将视频资源嵌入APP中

    Android Studio 实现将视频资源嵌入APP中 (直取思路跟代码跳转文末,如有帮助勿忘分享点赞奥!你的支持是我更新的动力!) 在正文之前首先想给大家引入安卓数据存储路径: 内部存储inter ...

最新文章

  1. oracle乘法运算,oracle实现相乘话语
  2. android应用内存分析,Android应用程序内存分析-Memory Analysis for Android Applications
  3. 20172332 2017-2018-2 《程序设计与数据结构》实验三报告
  4. ionic tab显示到顶部去了
  5. Django框架—富文本编辑器
  6. ubuntu文件夹建立软链接方法
  7. 【Oracle】to_char技巧
  8. Spark Streaming ReceiverTracker架构设计
  9. msyql 授权ip
  10. linux PS1 变量设置
  11. pygame教程:第一课 初始化和主循环
  12. 映美精IC Imageing Control .net控件调试问题
  13. 计算机无法安装网卡驱动,网卡驱动安装不了,详细教您解决网卡驱动安装不了...
  14. 怎么看别人的qq空间怎么看加密的qq空间
  15. CAT1模块EC200S 4G物联网模块串口透传MQTT协议 快速入门指导资料
  16. 【虹科讲座预告】企业如何防止基于USB的数据外泄
  17. 基于ESP8266的人体红外感应报警系统设计
  18. android和Mac共享文件,这可能是 Mac 共享文件最详细的教程了
  19. HTML+CSS+JS静态网页设计【篮球NBA介绍体育运动】web前端学生作业源码
  20. Hook API 原理 解析

热门文章

  1. 掘金健康大数据 需突破多重挑战
  2. 【NetApp】安装Cmode模拟器时,应使用带交换机的模式
  3. 【Java】StopWatch任务执行时间监视器
  4. 问题-[Delphi]MainFrame.pas(4340): E2036 Variable required
  5. Linux中强制结束一个进程的终极方法
  6. 运维笔记--postgresql占用CPU问题定位
  7. 一文看懂.NET的各种变体
  8. 实践篇:利用函数计算轻松构建全文检索系统
  9. android Merge标签
  10. 在Cisco交换机上实现隔离访问