应用资源可以分为两大类:

1、无法直接访问的原生资源,保存在asset目录下。

2、可以通过R资源清单类访问的资源,保存在res目录下。

资源的类型以及存储方式:

android要求在res目录下用不同的子目录来保存不同的应用资源:

资源的使用:

由于android SDK会在编译应用时在R类中为/res目录下的所有资源创建索引项,因此在java代码中访问资源主要是通过R类来完成:

[<package_name>.]R.<resource_type>.<resource_name>

package_name:指定R类所在的包

resource_type:R类中代表不同资源类型的子类

resource_name:指定资源的名称

XML文件中使用资源:

@[<package_name>.]<resorce_type>/<resource_name>

package_name:指定R类所在的包

resource_type:R类中代表不同资源类型的子类

resource_name:指定资源的名称

字符串、颜色、尺寸资源:

他们对应的XML文件都在/res/values目录下:

颜色值的定义:android中的颜色是通过红、绿、蓝三原色和透明度来标示的,颜色值总是以井号(#)开头,接下来是:Alpha-Red-Green-Blue的形式。其中Alpha值可以省略。如果省略了Alpha值,那么颜色默认是完全不透明的。

android中颜色的四种形式:

#RGB、#ARGB、#RRGGBB、#AARRGGBB

定义字符串、颜色、尺寸资源文件:

字符串资源文件:

定义颜色资源文件:

定义尺寸资源文件:

资源的使用通过前面说的办法使用。

android也允许使用资源文件来定义boolean常量和整形常量:

例如:booleans.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
<bool name="is_male">true</bool>
<bool name="is_big">false</bool>
</resources>

java代码中访问:

Resources resources = getResources();
boolean is_big = resources.getBoolean(R.bool.is_big);

整形常量的类似boolean类型,只是<bool....../>变成了 <integer......>

数组(Array)资源:

资源文件位于/res/values目录下,xml文件的根元素也是<resources....../>,该元素可以包含如下三种子元素:

1、<array....../>:定义普通的数组

2、<string-array....../>:定义字符串数组

3、<integer-array....../>:定义整数数组

java代码中通过如下的方式访问:

[<package_name>.]R.array.array_name

xml文件中如下访问:

@[<package_name>:]array.array_name

Resource也提供了相应的方法访问数组中的数据。

字符串数组实例:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="dt">
<item>one</item>
<item>two</item>
</string-array>
</resources>

其他的数组资源的xml文件定义类似字符串数组的定义。

Drawable资源:通常保存在/res/drawable目录下。

图片资源:图片资源是最简单的Drawable资源,我们只要把图片放入/res/drawable-xxx目录下,android SDK就会在编译应用自动加载该图片,并在R资源清单类中生成该资源的引用。

注:android不允许图片资源的文件名中出现大写字母,且不能以数字开头。否则android SDK无法为该图片在R类中生成资源的索引。

StateListDrawable资源:StateListDrawable用于组织多个Drawable对象。当使用StateListDrawable作为目标组件的背景、前景图片时,StateListDrawable对象所显示Drawable对象会随目标组件的改变而自动切换。

定义StateListDrawable对象的XML文件的根元素是<selector....../>,该元素可以包含多个<item....../>元素。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:color = "#FFF"
android:state_pressed="true">
</item> </selector>

LayerDrawable资源:LayerDrawable也可以包含一个Drawable数组,系统将会按这些Drawable对象的数组顺序绘制他们,索引最大的Drawable对象将会被绘制在最上面。

定义LayerDrawable对象的XML文件的根元素为<layer-list....../>,该元素可以包含多个<item....../>元素。

定义xml格式如下:

<?xml version="1.0" encoding="utf-8"?>
<layer-list
xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:drawable="@[package:]drawable/drawable_resource"
android:id="@[+][package:]id/resource_name"
android:top="dimension"
android:right="dimension"
android:bottom="dimension"
android:left="dimension" />
</layer-list>

<layer-list....../>中可以包含多个<item....../>元素。

LayerDrawable资源的效果如下:

ShapeDrawable资源:用于定义一个基本的几何图形(如矩形、圆形、线条等),定义ShapeDrawable的XML的根元素是<shape....../>。

xml格式如下:

<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape=["rectangle" | "oval" | "line" | "ring"] >
<!--定义几何图形的四个角的弧度-->
<corners
android:radius="integer"
android:topLeftRadius="integer"
android:topRightRadius="integer"
android:bottomLeftRadius="integer"
android:bottomRightRadius="integer" />
<!--定义使用渐变色填充-->
<gradient
android:angle="integer"
android:centerX="integer"
android:centerY="integer"
android:centerColor="integer"
android:endColor="color"
android:gradientRadius="integer"
android:startColor="color"
android:type=["linear" | "radial" | "sweep"]
android:useLevel=["true" | "false"] />
<!--定义几何图形的内边距-->
<padding
android:left="integer"
android:top="integer"
android:right="integer"
android:bottom="integer" />
<!--定义几何图形的大小-->
<size
android:width="integer"
android:height="integer" />
<!--定义使用单种颜色填充-->
<solid
android:color="color" />
<!--定义为几何形状绘制边框-->
<stroke
android:width="integer"
android:color="color"
android:dashWidth="integer"
android:dashGap="integer" />
</shape>

ClipDrawable资源:代表从其他位图上截取一个“图片片段”。

<?xml version="1.0" encoding="utf-8"?>
<clip
xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/drawable_resource"
android:clipOrientation=["horizontal" | "vertical"]
android:gravity=["top" | "bottom" | "left" | "right" | "center_vertical" |
"fill_vertical" | "center_horizontal" | "fill_horizontal" |
"center" | "fill" | "clip_vertical" | "clip_horizontal"] />

使用ClipDrawable对象时可以调用setLevel(int level)方法来设置截取的区域大小,当level为0时,截取图片片段为空,当level为10000时,截取整张图片。

AnimationDrawable资源:代表一个动画资源

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@[package:]anim/interpolator_resource"
android:shareInterpolator=["true" | "false"] >
<alpha
android:fromAlpha="float"
android:toAlpha="float" />
<scale
android:fromXScale="float"
android:toXScale="float"
android:fromYScale="float"
android:toYScale="float"
android:pivotX="float"
android:pivotY="float" />
<translate
android:fromXDelta="float"
android:toXDelta="float"
android:fromYDelta="float"
android:toYDelta="float" />
<rotate
android:fromDegrees="float"
android:toDegrees="float"
android:pivotX="float"
android:pivotY="float" />
<set>
...
</set>
</set>

定义动画的XMl资源应该放在/res/anim路径下,当使用ADT创建一个Android应用时,默认是不会包含该路径的,需要自己手工建立。

android:interpolator:该属性指定动画的变化速度,可以实现匀速、正加速、负加速、无规则加速等。android系统的R.anmi类中包含一些常量定义了不同的动画速度:

1、linear_interpolator:匀速变换

2、accelerate_interpolator:加速变换

3、decelerate_interpolator:减速变换

android:shareInterpolator:可以设置<set....../>下的所有变换效果是否使用相同的动画速度。

java代码中使用动画效果:为了获取实际的Animation对象,则可调用AnimationUtils的loadAnimation(Context, int resId)方法。

btn = (Button)findViewById(R.id.btn);
imageView = (ImageView)findViewById(R.id.imageView);
// 加载动画资源
final Animation animation = AnimationUtils.loadAnimation(this, R.anim.my_anmi);
// 设置动画结束后保留结束状态
animation.setFillAfter(true); btn.setOnClickListener(new View.OnClickListener() { public void onClick(View v) {
// 开始动画
imageView.startAnimation(animation);
};

使用原始的XML资源:原始的XML资源一般保存在/res/xml路径下------当ADT创建应用时/res目录下并没有包含xml目录,需要手动建立。android对原始的xml文件没有特殊的要求,只要格式良好就ok。

方法原始xml文件的方法:

1、xml文件中访问:@[<package>.]R.xml.<file_name>

2、java代码中访问:[<package>.].R.xml.<file_name>

java代码中可以通过Resources的下面方法获取实际的xml文档:

1、XmlResourceParser getXml(int id):获取XML文档,并使用一个XmlPullParser来解析XML文档,该方法返回一个解析器对象(XmlResourceParser是XmlPullParser的子类)。

2、InputStream  openRawResource(int id):返回xml文档对应的输入流。

android中使用pull解析器对XML文档进行解析,pull解析器采用的是事件驱动方式对XML文档进行解析,pull解析器是开源的。android中内置了pull解析器。

简单XML解析事例:

1.<?xml version="1.0" encoding="UTF-8"?>
2.<books>
3. <book id="12">
4. <name>thinking in java</name>
5. <price>85.5</price>
6. </book>
7. <book id="15">
8. <name>Spring in Action</name>
9. <price>39.0</price>
10. </book>
11.</books>
11.public class PullParseService {
12. public static List<Book> getBooks(InputStream inputStream) throws Exception{
13. List<Book> books = null;
14. Book book = null;
15. XmlPullParser parser = Xml.newPullParser();
16. parser.setInput(inputStream, "UTF-8");
17.
18. int event = parser.getEventType();//产生第一个事件
19. while(event!=XmlPullParser.END_DOCUMENT){
20. switch(event){
21. case XmlPullParser.START_DOCUMENT://判断当前事件是否是文档开始事件
22. books = new ArrayList<Book>();//初始化books集合
23. break;
24. case XmlPullParser.START_TAG://判断当前事件是否是标签元素开始事件
25. if("book".equals(parser.getName())){//判断开始标签元素是否是book
26. book = new Book();
27. book.setId(Integer.parseInt(parser.getAttributeValue(0)));//得到book标签的属性值,并设置book的id
28. }
29. if(book!=null){
30. if("name".equals(parser.getName())){//判断开始标签元素是否是name
31. book.setName(parser.nextText());
32. }else if("price".equals(parser.getName())){//判断开始标签元素是否是price
33. book.setPrice(Float.parseFloat(parser.nextText()));
34. }
35. }
36. break;
37. case XmlPullParser.END_TAG://判断当前事件是否是标签元素结束事件
38. if("book".equals(parser.getName())){//判断结束标签元素是否是book
39. books.add(book);//将book添加到books集合
40. book = null;
41. }
42. break;
43. }
44. event = parser.next();//进入下一个元素并触发相应事件
45. }//end while
46. return books;
47. }
48.}
1.public class Book {
2. private int id;
3. private String name;
4. private float price;
5. public int getId() {
6. return id;
7. }
8. public void setId(int id) {
9. this.id = id;
10. }
11. public String getName() {
12. return name;
13. }
14. public void setName(String name) {
15. this.name = name;
16. }
17. public float getPrice() {
18. return price;
19. }
20. public void setPrice(float price) {
21. this.price = price;
22. }
23. @Override
24. public String toString(){
25. return this.id+":"+this.name+":"+this.price;
26. }
27.}

布局(Layout)资源:资源文件应放在/res/layout目录下。

android应用的资源的更多相关文章

  1. 第三十二篇:在SOUI2.0中像android一样使用资源

    SOUI2.0之前,在SOUI中使用资源通常是直接使用这个资源的name(一个字符串)来引用.使用字符串的好处在于字符串能够表达这个资源的意义,因此使用字符串也是现代UI引擎常用的方式. 尽管直接使用 ...

  2. 今天给大家分享一下Android中的资源与国际化的问题

    摘要:该文章将向大家分享Android中的资源与国际化的问题. 今天给大家分享一下Android中的资源与国际化的问题,通常我们新建一个Android工程,目录结构如下图所示: 我们主要看一下layo ...

  3. Android中的资源文件

    最近复习Android资源文件的内容,留下点记录以备后用. Android中的资源主要是指存放在应用程序或者Framework相应包下/res中的内容.它们可以被本地化,如果必要的话会被编译成二进制文 ...

  4. Android应用程序资源的查找过程分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8806798 我们知道,在Android系统中, ...

  5. Android应用程序资源的编译和打包过程分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8744683 我们知道,在一个APK文件中,除了 ...

  6. Android所有Demo资源汇总,太全了(申明:来源于网络)

    Android所有Demo资源汇总,太全了(申明:来源于网络) 地址:http://bbs.csdn.net/topics/391928947

  7. Android 系统回收资源时进程被杀的优先级

    http://developer.android.com/guide/components/processes-and-threads.html#Processes Android 操作系统的内存回收 ...

  8. Android中的资源与国际化!

    Android中的资源与国际化的问题,通常我们新建一个Android工程,目录结构如下图所示: 我们主要看一下layout与values目录,layout里的xml文件的我们应用使用布局的文件,val ...

  9. Android中的资源访问

    Android中的资源是指非代码部分,指外部文件. assets中保存的一般是原生的文件,例如MP3文件,Android程序不能直接访问,必须通过AssetManager类以二进制流的形式来读取. r ...

  10. Android之旅十六 android中各种资源的使用

    android中各种资源的使用: 在android开发中,各种资源的合理使用应该在各自的xml中进行定义,以便反复使用; 字符串资源:strings.xml,xml中引用:@string/XXX,ja ...

随机推荐

  1. fdisk分区实例

    查看磁盘分区详情 直接使用fdisk -l 或者使用fdisk /dev/sda,再使用p命令来查看 Command (m for help): p Disk /dev/sda: 32.2 GB, 3 ...

  2. 8种常见SQL错误用法,你中招了吗?

    作者:db匠 来源:https://yq.aliyun.com/articles/72501 1.LIMIT 语句 分页查询是最常用的场景之一,但也通常也是最容易出问题的地方.比如对于下面简单的语句, ...

  3. Redis Sentinel 高可用方案

      redis 主从复制的问题 Redis主从复制可将主节点数据同步给从节点,从节点此时有两个作用: 1,一旦主节点宕机,从节点作为主节点的备份可以随时顶上来. 2,扩展主节点的读能力,分担主节点读压 ...

  4. mybatis中的命名空间(namespace)的作用

    mybatis中为每一个映射文件添加一个namespace,这样不同的映射文件中sql语句的id相同也不会有冲突,只要定义在映射文件中的sql语句在该映射文件中id唯一就可以

  5. android中使用MediaRecoder录制声音

    package com.test.mediarecorder; import java.io.File; import android.media.MediaRecorder; import andr ...

  6. Process Array

    http://xiaorui.cc/2016/05/10/%E6%BA%90%E7%A0%81%E5%88%86%E6%9E%90multiprocessing%E7%9A%84value-array ...

  7. opensns功能详解

    <!DOCTYPE html> opensns功能详解 wmd-preview h1 { color: #0077bb; /* 将标题改为蓝色 */ } opensns功能详解 软件工程 ...

  8. 请求一个url的全过程

    最近在进行前端面试方面的一些准备,遇到了一个经典前端问题,一个url从输入到页面加载中间到底发生了什么,以前也认真想过这个问题,但是当时回答的都不全面,现在来好好总结一下: 总体来说分为以下六个步骤: ...

  9. NFS(网络文件系统)

    NFS(网络文件系统) 1.关于NFS介绍 1.1NFS在企业中的应用场景 在企业集群架构的工作场景中,NFS网络文件系统一般被用来存储共享视频,图片,附件等静态资源文件,通常网站用户上传的文件都会放 ...

  10. 统计所有小于非负整数 n 的质数的数量,埃拉托斯特尼筛法

    素数的定义:质数又称素数.一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数. 1.暴力算法: 令i=2; 当i<n的时候,我们循环找出2-i的质数,即让i%(2~i-1), ...