IT圈内那点事儿android基础知识安卓

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

2016-10-26  本文已影响217人  码道成功

资源(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文件后可以看到原文件。

上一篇下一篇

猜你喜欢

热点阅读