Android资源知识(一)之Resources概览
来源:互联网 发布:java中for循环语句例子 编辑:程序博客网 时间:2024/06/05 13:32
资源(Resources)是指应用中的图片、媒体文件、字符串、颜色值等。Android程序员在开发过程中随时要和Resources打交道,比如R.layout.activity_main、@string/hello……
一、Android应用资源的构成
Android系统提供了一套强大的资源管理框架Resources和AssetManager,下面我们从工程目录结构来学习下Android应用资源体系的构成,工程目录结构图如下:
从图中可以看到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对话框,截图如下:
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开发精要》一书里的一张插图来说明,如下图:
三、使用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文件后可以看到原文件。
原文链接:http://www.jianshu.com/p/a1466e7c43fd
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
- Android资源知识(一)之Resources概览
- android之resources资源
- Android 应用资源---提供资源(Providing Resources)(一)
- Android应用资源---动画资源(Animation Resources)(一)
- android学习之 resources资源
- android学习之resources资源
- android学习之resources资源
- android学习之resources资源
- Android应用资源之动画资源(Animation Resources)
- Android应用资源之动画资源(Animation Resources)
- Android 应用资源(Application Resources)---概要
- Android之Activity系列总结(一)--Activity概览
- Android之Activity系列总结(一)--Activity概览
- Android:Resources资源文件
- Android 资源(Resources)访问
- Android用户界面(一):概览
- Android资源知识(三)之String资源
- Android知识体系结构概览
- 第十三周项目1(1)普里姆算法的验证
- hadoop学习2--hdfs详解
- mysql 数据库优化案例
- gcc编译标志-fPIC
- iOS开发之Block常见用法
- Android资源知识(一)之Resources概览
- 第十三周--prim算法的验证
- mac环境下svn使用
- 斯坦福CS231n - CNN for Visual Recognition(2)-lecture3(上)线性分类器、损失函数
- json_decode无法处理\解决方法
- 训练mnist
- python打包成exe的两种方法对比
- 设置ViewPager滑动切换速度
- 【第13周 项目1 - Prim算法的验证】