当前位置:操作系统 > 安卓/Android >>

Android实战技巧:使用原始资源文件

 

背景知识介绍

与其他平台的应用程序一样,Android中的应用程序也会使用各种资源,比如图片,字串等,会把它们放入源码的相应文件夹下面,如/res/drawable, /res/xml, /res/values/, /res/raw, /res/layout和/assets。Android也支持并鼓励开发者把UI相关的布局和元素,用XML资源来实现。总结起来,Android中支持的资源有:

颜色值                 /res/values               以resources为Root的XML文件,定义形式为<color name>value</color>

字串                    /res/values                以resources为Root的XML文件<string name>value</string>

图片                    /res/drawable            直接放入,支持9 Patch可自由拉伸

图片的颜色        /res/values               以resources为Root的XML文件,定义形式为<drawable name>value</drawable>

单位资源            /res/values               以resources为Root的XML文件<dimen name>value</dimen>

菜单                    /res/menu                以menuo为root的XML文件

布局                    /res/layout                 这个就是GUI的布局和元素

风格和主题        /res/values                以resources为Root的XML文件<style name>value</style>

动画                    /res/anim                 有二种:一个是帧动画(frame animation),也就是连续变换图片以animation-list为Root的XML文件;另外一种就是补间动画(tweened animation),它对应于API中的Animation和AnimationSet,有translate、scale、rotate、alpha四种,以set为root来定义,这个set就相当于AnimationSet

再说下目录: www.zzzyk.com

/res/anim                  用于存放动画

/res/drawable          存放图片,或等同于图片的资源如shape,或selector

/res/menu                 存放Menu

/res/values               存放修饰性资源:字串,颜色,单位,风格和主题

/res/layout                存放UI布局和元素

/res/raw                    存放运行时想使用的原始文件

/assets                     存放运行时想使用的原始文件

除了原始文件目录/res/raw和/assets以外,其他的资源在编译的时候都会被第三方软件aapt进行处理,一个是把图片和XML文件进行处理,例如把XML编译成为二进制形式;另外处理的目的就是生成R.java文件,这个文件是访问资源时必须要用到的。

/res目录下面的所有文件都会映射到R.java文件中,以整数Id的形式被标识,相同类型的资源被一个内部类来封装,一个R.java的文件类似于这样:

 

/* AUTO-GENERATED FILE.  DO NOT MODIFY.

 *

 * This class was automatically generated by the

 * aapt tool from the resource data it found.  It

 * should not be modified by hand.

 */ 

 

package com.android.explorer; 

 

public final class R { 

    public static final class attr { 

    } 

    public static final class drawable { 

        public static final int icon=0x7f020000; 

    } 

    public static final class id { 

        public static final int action=0x7f060004; 

        public static final int description_panel=0x7f060001; 

        public static final int fileinfo=0x7f060003; 

        public static final int filename=0x7f060002; 

        public static final int linearlayout_test_1=0x7f060005; 

        public static final int linearlayout_test_2=0x7f060006; 

        public static final int linearlayout_test_3=0x7f060007; 

        public static final int thumbnail=0x7f060000; 

    } 

    public static final class layout { 

        public static final int fileant_list_item=0x7f030000; 

        public static final int linearlayout_test=0x7f030001; 

    } 

    public static final class raw { 

        public static final int androidmanifest=0x7f040000; 

    } 

    public static final class string { 

        public static final int app_name=0x7f050001; 

        public static final int hello=0x7f050000; 

    } 

从这个R.java就可看出在/res中定义或提供资源时的注意事项:

1. 同一个类型,或同一文件夹下面的资源不可以使用相同的文件名,也就是说不能用文件扩展名来区别不同的文件,因为R.java中只保留资源的文件名而不管扩展名,所以如果有二个图片一个是icon.png另一个是icon.jpg,那么在R.java中只会有一个R.drawable.icon。另外一个则会无法访问到。

2. 资源文件的名字必须符合Java变量的命名规则,且不能有大写,只能是'[a-z][0-9]._',否则会有编译错误,因为R.java中的变量Id要与资源中的文件一一对应,也就是说用资源文件名来作为Id的变量名,所以一定要符合Java变量的命名规则,另外它还不能有大写。

3. 除了SDK支持的folder外,不能再有子Folder,虽不会有编译错误,但是子Folder会被完全忽略,如在/res/layout下在建一个子Folder activity(/res/layout/acitivity/, 那么你在生成的R.java中是看不到activity和其内的内容的。

4. 对于资源文件的大小有限制,最好不要让单个文件大于1M,这是SDK文档说明的限制,但具体的我没有进行试验(据说2.2版本以后的可支持到10M,不知道是真的还是假的)

5. 所有/res下面的资源都能通过Resources()并提供Id来访问。

使用原始资源

对于大多数资源在编译时会对文件内容进行特殊处理,以方便Apk在运行时访问。 如果想要运行时使用未经处理的原始资源,可以把资源文件放

补充:移动开发 , Android ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,