Android资源知识(一)之Resources概览

来源:互联网 发布:java中for循环语句例子 编辑:程序博客网 时间:2024/06/05 13:32

资源(Resources)是指应用中的图片、媒体文件、字符串、颜色值等。Android程序员在开发过程中随时要和Resources打交道,比如R.layout.activity_main、@string/hello……

一、Android应用资源的构成

    Android系统提供了一套强大的资源管理框架ResourcesAssetManager,下面我们从工程目录结构来学习下Android应用资源体系的构成,工程目录结构图如下:


kinbos工程结构图.png


从图中可以看到Android应用资源由两部分构成:资源目录资源文件

1、资源目录

    资源目录就是res目录下的各个子目录,如anim、drawable、drawable-hdpi、layout、menu、raw、values等。这些目录都必须是系统预定义的,也就是说像res/drawable,res/layout都是合法的,而像res/kinbos、res/abcd都不是合法的,系统是识别不了的。无法在R类中生成相应的数据。
    res/anim
是存放动画相关资源的。
    res/drawable是存放图片资源的。
    res/layout是存放xml布局文件的。
    res/menu是存放菜单样式资源的。
    res/raw是存放音频、视频等纯数据文件资源的。
    res/values是存放字符串、颜色值、数组等常量定义的文件的。

2、资源文件

    资源文件就是资源目录下的数据文件,比如.xml、图片、音视频文件等。注意:资源文件只能放在资源目录下,而不能放在res目录下。

二、Android应用程序的编译步骤

    这里之所以提到Android应用程序的编译步骤是因为Android对应用资源的处理贯穿了应用的整个开发流程的。下面我们按步骤Properties——>Builders打开工程的Properties对话框,截图如下:


kinbos编译步骤.png


Android应用程序的编译过程主要有以下4个步骤:

1、Android Resource Manager

    Android通过aapt工具(aapt工具位于路径:[sdk目录]/build-tools/[android-xx])根据res目录下的资源在R类中生成与之相对应的嵌套子类及static final型常量。R.java文件代码如下:

package com.kinbos.note;public final class R {    public static final class anim {        public static final int abc_fade_in=0x7f040000;        public static final int abc_fade_out=0x7f040001;        public static final int abc_slide_in_bottom=0x7f040002;        public static final int abc_slide_in_top=0x7f040003;        public static final int abc_slide_out_bottom=0x7f040004;        public static final int abc_slide_out_top=0x7f040005;    }}

从上述代码中我们可以看出,res目录下的子目录是嵌套子类的类名,如代码中的anim,具体的文件名称是anim类的static final型常量。

2、Android Pre Compiler

    这个步骤是将res目录下的文件资源编译成二进制格式。比如把.xml文件编译成二进制格式。注意:res/raw目录中的资源除外。

3、Java Builder

    把.java源码编译成.class文件,包括R.java

4、Android Package Builder

    这个步骤是把.class文件编译成.dex格式的文件。.dex文件是Dalvik虚拟机所特有的文件格式,最后将.dex文件和其他文件打包成.apk文件。
    为了更加简洁清晰的理解Android应用的编译和打包流程,我们将引用范怀宇著的《Android开发精要》一书里的一张插图来说明,如下图:


kinbos 编译打包流程.jpg

三、使用Android资源

1、从XML文件中调用资源

语法:@[包名]资源类型 / 资源名称

<TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:textColor="@android:color/holo_blue_dark"        android:text="@string/hello_world" />

2、使用代码调用资源

@Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);    }

四、assets和res的区别

    1、res目录中的所有资源都会注册在R类中,可以通过R类直接调用;而assets中的资源则不会被注册在R类中,所以只能通过文件名引用。
    2、assets目录中的文件和res/raw不做处理,所以在解压apk文件后可以看到原文件。



文/kinbos(简书作者)
原文链接:http://www.jianshu.com/p/a1466e7c43fd
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
0 0
原创粉丝点击