在很多地方都需要用到资源文件,做C开发的有可能将一些字符串注册为资源,J2ME也有类似的功能,其目的都是为了将代码与界面的显示相分离开来,也就是将表现层与控制层相剥离,极大的提高了程序的灵活性。
Android也提供了这样的功能,这样的话你就可以根据目前设备不同的放置方向,横着的还是竖着的,来动态调整设备的界面布局,可以根据不同的语言环境调整语言显示,等等。本篇文章将会先讲解Android资源的基础知识,以后的博文中会给出各种资源使用的样例。
android资源位于工程的res/目录下,分为许多种类:
一些比较重要的资源类型如下:
res/anim: 动画资源
res/color: 颜色资源
res/drawable: 一些位图文件资源
res/values: 里面包含一些常用的常量,比如字符串资源等
res/menu: 菜单资源
res/layout: 布局文件资源
res/raw: 原生文件,会被直接复制到发布包中。如果想要打开这个文件夹下面的文件需要使用Resources.openRawResources()方法返回的InputStream对象,进行读取
res/xml: 一些原生xml文件
还有更多类型的资源文件这里就不再一一列出,后面遇到我们会讲解。但是需要注意的一点是不要直接接某一个资源文件放在res/根目录下,这样的话会导致编译不过。
如何使用在res目录下定义的这些资源文件呢,这里就需要用到android系统自动生成的一个类:R类,coder们可以使用这个类来获取
自己定义的资源,这个类位于工程的gen/目录下,如下:
R类下根据不同的资源类型自动生成了不同的资源索引(resource IDs):
public final class R {
public static final class attr {
}
public static final class color {
public static final int blue=0x7f040000;
}
public static final class drawable {
public static final int icon=0x7f020000;
}
public static final class id {
public static final int change=0x7f060000;
public static final int et01=0x7f060001;
}
public static final class layout {
public static final int main=0x7f030000;
}
public static final class string {
public static final int app_name=0x7f050001;
public static final int hello=0x7f050000;
}
}
在程序代码中使用的方式为:R.xx.yy,xx是你的资源的类型(对应的在上述的R类中的内部类名),yy就是你的资源的id
在别的资源中使用另外一个资源的格式为@[包名:]类型名/资源ID,其中包名是可选的,在同一个包下引用的使用可以将其省略。