美文网首页IT圈内那点事儿android基础知识安卓
Android资源知识(一)之Resources概览

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

作者: 码道成功 | 来源:发表于2016-10-26 17:44 被阅读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文件后可以看到原文件。

    相关文章

      网友评论

        本文标题:Android资源知识(一)之Resources概览

        本文链接:https://www.haomeiwen.com/subject/fgiduttx.html