Android框架提供资源文件管理的目的主要有两个:

  1. 逻辑设计与界面设计分开。可以理解成让更好地运用MVC,帮助团队配合。
  2. 资源文件独立为本地化和运行时状态变化提供了一个简便的解决方案。这部分很重要,但是本文不会描述,因为只要知道了资源的使用方式,自然就明白为什么这样就能提供一个解决方案。

1、资源提供的方式

Android程序代码一般的结构是:

MyProject/src/ MyActivity.java res/drawable/ icon.png layout/ main.xmlinfo.xmlvalues/ strings.xml 

可以看到,Android所有的资源文件都保存在res目录下,res目录支持的资源类型如下表所示:

目录

资源类型

animator/

定义property 动画的xml文件;property animation指的是

anim/

定义tween(补间)动画的xml文件。它和property动画的差别可以理解为,tween是两个view切换的动画,而property动画是view里面的对象本身的动画。这个理解不一定正确,但是意思基本是这样。

color/

定义颜色列表的xml文件

drawable/

1、位图文件如png、jpg、gif;2、可以编译成drawable资源子类型的xml文件,一般用来组合位图文件。

layout/

UI文件,这个不用解释。

menu/

菜单UI文件

raw/

二进制文件,如视频。如果想直接引用文件名,则使用assert文件夹。

values/

常用的值如arrays.xml colors.xml string.xml 等等

xml/

普通xml文件,可以用Resources.getXML()来引用。

上表描述的是Android寻找资源文件时的默认文件夹,还可以对上述文件夹进行拓展,以适应不同的运行时系统。这里举两个例子:

1)

res/drawable/  icon.pngbackground.png   drawable-hdpi/ icon.pngbackground.png 

通过对drawable进行拓展,hdpi文件夹下的文件会自动在相应的屏幕分辨率下被使用。

2)

res/values/  strings.xmlvalues-zh/ strings.xml

通过对values进行拓展,Android系统可以在运行时根据系统语言自动选择应用程序的语言。

所有的扩展类型可以看官网(链接1):

http://developer.android.com/intl/zh-CN/guide/topics/resources/providing-resources.html#AlternativeResources

那么,Android到底是怎么寻找最匹配的资源文件的呢?

官网给出了这样一张图和一个简单的例子(链接2)

http://developer.android.com/intl/zh-CN/guide/topics/resources/providing-resources.html#BestMatch

这里我只是解释一下具体的步骤:

  1. 去掉有冲突的资源类型,如系统是中文,那么英文的就不会被匹配;
  2. 按照链接1中表格的顺序进行匹配,去掉那些不成功的文件夹,继续匹配直到只有一个。

比如:

1)drawable/
2)drawable-en/
3)drawable-fr-rCA/
4)drawable-en-port/
5)drawable-en-notouch-12key/
6)drawable-port-ldpi/
7)drawable-port-notouch-12key/

匹配

Locale = en-GB
Screen orientation = portScreen pixel density = hdpiTouchscreen type = notouch 

Primary text input method = 12key

  1. 去掉冲突的,所以3)被去掉
  2. 根据链接1中表格,下一步匹配的顺序是en, port, ldpi, notouch, 12key。所以:
    1. 匹配en,去掉1、6、7
    2. 匹配port,去掉2、5
    3. 最后只剩下4。

注意:Android1.5和Android1.6是根据版本号来匹配,而不是上文所述的顺序。如drawable/ (低于1.5的版本), drawable-v4 (1.6版本), and drawable-v6 (2.0.1以上的版本,v5不支持了)。

2、Android资源的使用方式

Android会编译在res目录下的资源,在gen/文件夹下生成R.java文件,文件的大致结构是:

class final class R {public static final class array {public static final int array1= 0x7f090007;}public static final class layout {public static final int list1= 0x7f090007;}
}

在代码文件中使用的语法为:

[<package_name>.]R.<resource_type>.<resource_name>

如:

ImageView imageView = (ImageView)findViewById(R.id.myimageview);
imageView.setImageResource(R.drawable.myimage);

在xml文件中使用的方式为:

<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:textColor="@color/opaque_red"android:text="@string/hello" />

注意:

1、在xml中使用style attributes的方式有点不一样,它的语法形式是

?[<package_name>:][<resource_type>/]<resource_name>

区别就是前面的”?“,其他xml中引用的方式是”@“。如

<EditText id="text"android:layout_width="fill_parent"android:layout_height="wrap_content"android:textColor="?android:textColorSecondary"android:text="@string/hello_world" />

2、为了使用方便,Android定义了一些常用资源类型,如:

setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, myarray));

转载于:https://www.cnblogs.com/wangfenjin/archive/2012/09/03/2669677.html

Android Resources Overview —— Android 资源文件相关推荐

  1. Android语言国际化values资源文件命名规则

    今天,简单讲讲 android 里如何将语言国际化,和各个国家语言的value文件夹的命名规则. 昨天,需要将app的字符资源国际化,可是却不知道如何命名,在网上找了资料,终于解决了问题. Andro ...

  2. Android中通过数组资源文件xml与适配器两种方式给ListView列表视图设置数据源

    场景 实现效果如下 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免费下载. 实现 将布局改 ...

  3. Android屏幕适配-资源文件夹命名与匹配规则

    Table 2. Configuration qualifier names. Configuration Qualifier Values Description 说明:本文档目的为分析androi ...

  4. 第二章:Android res下的资源文件(2)

    4.3常用资源文件的使用 5.颜色 1.建立资源文件:color.xml <?xml version="1.0" encoding="utf-8"?> ...

  5. android 修改framework下资源文件后如何编译

    在framework/base/core/res/res 下添加资源文件后需要先编译资源 然后编译framework 才可正常引用 进入项目根目录 cd frameworks/base/core/re ...

  6. android样式文件,Android学习笔记样式资源文件

    样式资源和主题资源都是写在styles.xml文件里面的 30sp #06F 18sp 在activity_main.xml中引用 android:layout_width="wrap_co ...

  7. android如何使用xml资源文件,Android-使用xml文件资源定义菜单

    使用 XML 文件定义菜单 Android 提供了创建菜单的方式,一种是在 Java 代码中创建,一种是使用XML 文件定义.上面的实例都是 Java 创建菜单,在 Java 存在如下大学. 实现效果 ...

  8. android shapes、elector资源文件

    1.Shape 简介 作用:XML中定义的几何形状 位置:res/drawable/文件的名称.xml 使用的方法: Java代码中:R.drawable.文件的名称 XML中:Android:bac ...

  9. Android手机和平板资源文件,如何从Android手机和平板电脑中恢复已删除的文件

    第3部分:如何从Android手机和平板电脑中恢复已删除的文件 正如我们所看到的,借助为此特定原因设计的专用工具,您仍可以从设备中恢复已删除的文件.最好的Android数据恢复软件之一dr.fone ...

  10. android实现对apk资源文件整体替换

    上一篇文章中我们实现了对资源文件的替换,但是有一个问题,就是得创建一个resource对象并使用这个resource对象才能实现对资源的替换,很麻烦,需要每个类去重写getResource方法.通过阅 ...

最新文章

  1. php 数字变量,php入门变量之数字_PHP教程
  2. vsearch2.8.1使用和命令简介——中文帮助文档(免费64位版usearch)
  3. Markdown语法-基础
  4. 管道符和作业控制 shell变量 环境变量配置文件
  5. linux yum nothing,Centos6.9 yum安装htop报错解决过程
  6. 查询计算机端口号被谁占用了
  7. 鸿蒙开发版智慧生活,华为发布全新分布式鸿蒙OS,打造全场景智慧生活新体验...
  8. 智伴机器人广西团队_{智伴AI机器人}陈涛广西南宁防城港城市合伙人-人工智能下一个风口精准蓝...
  9. postman 返回json乱码_post json 中文编码问题
  10. Ubuntu 安装 gcc 过程
  11. 全新SQL Server教程
  12. R语言批量生成CaseWhen的解决方案
  13. WordPress主题插件Modown6.1绿色版+Erphpdown11.6等多插件
  14. excel分段函数c语言,实战:Excel 逻辑分段函数应用
  15. 关于win7 环境下安装docker容器的步骤 以及过程中的问题解决
  16. Spark集群环境搭建+Maven、SBT编译部署+IDEA开发(二)
  17. 量化信噪比 非均匀量化_非均匀量化-Read.PPT
  18. matlab 锁相环仿真,MATLAB锁相环仿真程序求解
  19. js生成8位随机字符串密码
  20. Windows Server 2003的32位企业版支持4G以上内存

热门文章

  1. win7命令提示符下关闭IPv6隧道的方法
  2. android studio技巧之设置monitor窗口模式查看logcat
  3. 如何解决NullPointerException in android.view.GLES20RecordingCanvas
  4. BZOJ5232[Lydsy2017省队十连测] 好题
  5. oracle 模拟 mysql,mysql通过表和function模拟oracle的sequence
  6. win10如何打开摄像头_win10系统,蓝牙关闭,如何打开?
  7. mysql mutex_MySQL 有关锁的简单介绍
  8. gun linux定义,linux gun make 入门
  9. click事件在什么时候出发_如何解决移动端Click事件300ms延迟的问题?
  10. Oracle autotrace使用说明