1、资源的类型

a、无法直接访问的源生资源,保存在assets目录下

b、可通过R资源清单类访问的资源,保存在res目录下

大部分时候提到的Android应用资源时,都是指位于res目录下的应用资源,AndroidSDK会在编译该应用时在R类中为它们创建对应的索引项。

2、资源的类型及存储方式

Android要求在res目录下用不同的子目录保存不同的应用资源,下表显示Android不同资源在/res目录下的存储方式:

目录

存放的资源

/res/anim/ 存放定义补间动画的XML文件
/res/color/ 存放定义不同状态下颜色列表的XML文件

/res/drawable/

该目录下存放各种位图文件(如*.png、*.9.png、*.jpg*、.gif)等,除此之外还可是编译成如下各种Drawable对象的XML文件:

BitmapDrawable

NinePatchDrawable对象

StateListDrawable对象

ShapeDrawable对象

AnimationDrawable对象

Drawable的其它各种子类的对象

/res/layout/ 存放各种用户界面的布局文件
/res/menu/ 存放为应用程序定义各种菜单的资源,包括选项菜单、子菜单、上下文菜单资源
/res/raw/ 该目录下存放任意类型的原生资源。在java代码中通过调用Resource对象的openRawResource(int id)方法获取该资源的二进制输入流。

实际上,如果应用程序使用原生资源,推荐把这些原生资源保存到/assrts目录下,然后在应用程序中使用AssetManager来访问这些资源。

/res/values/ 存放各种简单的XML文件。这些简单值包括字符串值、整数值、颜色值、数组等。

字符串、整数值、颜色值、数组等各种值都是存放在该目录下,而且这些资源文件的根目录都是<resources.../>元素,当我们为该<resource.../>元素添加不同的子元素则代表不同的资源,例如:

string/integer/bool子元素:代表添加一个字符串值/整数值/boolean值

color子元素:代表添加一个颜色值

array子元素或string-array、int-array子元素:代表添加一个数组

style子元素:代表添加一个样式

dimen:代表添加一个尺寸

由于各种简单值都可以定义在/res/values/目录下的资源文件中,如果在同一份资源文件中定义各种值,势必增加程序维护的难度。为此,Android建议使用不同的文件来存放不同类型的值:

arrays.xml:定义数组资源

colors.xml:定义颜色值资源

dimens.xml:定义尺寸值资源

strings.xml:定义字符串资源

styles.xml:定义样式资源

/res/xml/ 任意的原声XML文件。这些XML文件可在java代码中使用Resources.getXML()访问。


3、使用资源

(1)在java代码中使用资源

由于Android SDK会在编译应用时在R类中为/res目录下所有资源创建索引项,因此在java代码中访问资源主要通过R类来完成。期完整的语法格式为:

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

<package_name>:指定R类所在包,实际上就是使用全限定类名。当然,如果在java程序中导入R类所在包,就可以省略包名。

<resource_type>:R类中代表不同资源类型的子类,例如string代表字符串资源

<resource_name>:指定资源的名称。该资源名称可能是无后缀的文件名(如图片资源),也可能是XML资源文件中由android:name属性所指定的名称

(2)在XML代码中使用资源

当定义XML资源文件时,其中的XML元素可能需要指定不同的值,这些值就可以设置为已定义的资源项,在XML中使用资源的完整语法格式为:

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

<package_name>:指定资源类所在应用包,如果引用的资源和当前资源位于同一个包下,则可以省略。

<resource_type>:R类中代表不同资源类型的子类,例如string代表字符串资源

<resource_name>:指定资源的名称。该资源名称可能是无后缀的文件名(如图片资源),也可能是XML资源文件中由android:name属性所指定的名称

4、使用字符串、颜色、尺寸资源

字符串资源、颜色资源、尺寸资源,它们对应的XML文件都位于/res/values目录下,它们默认的文件名,以及在R类中对应的内部类如表

资源类型

资源文件的默认名

对应于R类中的内部类的名称

字符串资源 /res/values/strings.xml R.string
颜色资源 /res/values/colors.xml R.color
尺寸资源 /res/values/dimens.xml

R.dimen


Android允许使用资源文件定义boolean常量,默认名为:/res/values/bools.xml,该文件的根源素也是<resources.../>,根元素内通过<bool.../>子元素定义boolean常量,对应R类中内部类的名称为R.bool

Android允许使用资源文件定义整型常量,默认名为:/res/values/integers.xml,该文件的根源素也是<resources.../>,根元素内通过<integer.../>子元素定义整型常量,对应R类中内部类的名称为R.integer

5、数组(Array)资源

Android采用位于/res/values目录下的arrays.xml文件来定义数组,定义数组时XML资源文件的根目录也是<resources.../>元素,该元素内可包含如下三种子元素:

<array.../>子元素:定义普通类型的数组,例如Drawable数组。

<string-array.../>子元素:定义字符串数组。

<integer-array.../>子元素:定义整数数组。

在java代码中访问形式:[<package_name>.]R.array.array_name

在XML代码中访问形式:@[<package_name>:]array/array_name

为了能在java程序中访问到实际数组,Resources提供了

如下方法:

String[] getStringArray(int id):根据资源文件中字符串数组资源的名称来获取实际的字符串数组。

int[] getIntArray(int id):跟据资源文件中整型数组资源的名称来获取实际的整型数组。

TypedArray obtainTypedArray(int id):跟据资源文件中普通数组资源的名称来获取实际的普通数组。TypedArray代表一个通用类型的数组,该类提供了getXxx(int index)方法来获取指定索引处得数组元素。

更多相关文章

  1. H264解码器源码(Android(安卓)1.6 版和QT都可以调用)
  2. 在电脑端加密的文件,放在android上进行解密,但是出现pad block cor
  3. 【Android初学者】Eclipse 资源管理器,文件夹功能区讲解
  4. Android软键盘在清单文件中所有属性解释大全
  5. [置顶] Android中的XML解析与生成——DOM解析xml
  6. 实现android的增量更新
  7. TensorFlow在Android平台上的安装和应用
  8. Android如何在字符串资源文件strings.xml中通过引用的方式在一个
  9. Android多媒体学习六:访问网络上的Audio对应的M3U文件,实现网络音

随机推荐

  1. eBPF在网易轻舟云原生的应用实践
  2. 网易数帆基于DPDK的高性能四层负载均衡实
  3. Bitlocker分区转换失败的恢复案例
  4. 抖音域名防封免拦截有哪些可靠有效的方法
  5. 大华NVR监控恢复案例
  6. 如何解决迁移新域后用友ERP U8打印报错执
  7. 面试官:谈谈 SimpleDateFormat 的线程安全
  8. SpringBoot同时支持多个视图解析器jsp+ht
  9. 如何解决 MacBook Pro Touch ID不起作用?
  10. 留后门?Nacos被爆存在严重的旁路身份验证