一、资源访问:

(一)、概念:

Android中的资源是指可以在代码中使用的外部文件,这些文件作为应用程序的一部分,被编译到应用程序中。在项目中,这些资源被保存到Android应用的res目录下。

(二)、资源分类:

id;

字符串资源文件;

颜色资源

尺寸资源文件

布局资源

数组资源

样式和主题资源

菜单资源

已编译的任意XML资源文件【重要】: res/xml

未编译的原始资源文件: res/raw

图像(Drawable)资源

普通图像资源

xml图像资源:bitmap

图层(Layer)资源:layer-list , item

图像状态(State)资源:selector , item

图像级别(Level)资源:level-list , item

淡入淡出(CrossFade)资源:transition , item(只支持两个)

外形(Shape)资源:shape(shape , gradient , padding ,corners , stroke)

动画资源

透明度补间动画 alpha

缩放补间动画 scale

旋转补间动画 rotate

移动补间动画 translate

属性动画:res/animator (api11之后出现)

逐帧动画: res/anim animation-list , item

补间动画: res/anim

【备注:】资源编译器会编译除了raw资源以外的所有资源,并将它们全部放到最终的.apk文件中。apk(Android Package)包含Android应用程序的代码和资源。

(三)、各种资源文件的xml格式:

1、字符串资源文件:

示例代码:

<resources><stringname="red">红色</color><stringname="green">绿色</color><stringname="blue">蓝色</color></resources>

Java文件中获取方式:getResources().getString(R.string.red);

2、颜色资源文件:

示例代码:

<resources><colorname="red">#f00</color><colorname="green">#0f0</color><colorname="blue">#00f</color></resources>

在需要调用该颜色的地方写法是:android:background="@color/blue"

Java文件中获取方式:getResources().getColor(R.color.blue);

3、尺寸资源文件:

示例代码:

<resources><dimenname="title">20dp</color><dimenname="content">10dp</color></resources>

Java文件中获取方式:getResources().getDimension(R.dimen.title);

4、数组资源文件:

Android中,不推荐将数组直接定义在java文件中,而是使用数组资源文件来定义数组。

定义在res下values目录下:arrays.xml文件中。格式如下:

根元素:<resources></resources>

子元素:可以有三种。

<array></array>:称为类型数组Typed-Array资源(或者:资源数组资源)

<string-array></string-array>

<integer-array></integer-array>

下级子元素:<item>数值</item>

示例代码:

<resources><string-arrayname="choiceItems"><item>主屏模式</item><item>wifi设置</item><item>蓝牙设置</item><item>网络设置</item><item>More</item></string-array></resources>

Java文件中获取方式:getResources().getStringArray(R.array.choiceItems);

【备注:】如果是int型数组,则格式如下:

<resources><integer-arrayname="age"><item>20</item><item>30</item><item>40</item><item>50</item></integer-array></resources>

Java文件中获取方式:getResources().getIntArray(R.array.age);

【备注:】如果是资源数组资源,则格式如下:

<resources><arrayname="icons"><item>@drawable/home</item><item>@drawable/setting</item><item>@drawable/logout</item></array><arrayname="title"><item>首页</item><item>设置</item><item>退出</item></array></resources>

Java文件中获取方式:

TypedArray arrIcons =getResources().obtainTypedArray(R.array.icons);

Drawable drawable = arrIcons.getDrawable(0);

5、原始XML资源

位置:res/xml目录下;

定义格式:格式良好的,没有特殊要求的普通xml文件;

Java文件中获取方式:getResources().getXml(R.xml.文件名称);

解析xml的核心代码:

//从资源文件夹中读取原始xml资源文件XmlResourceParserpullParser=getResources().getXml(R.xml.citylist);//将读取xml资源文件返回的XmlResourceParser对象继续解析,获取到xml节点中需要的数据。//备注:XmlResourceParser类是XmlPullParser的子类publicList<Map<String,Object>>parseXML(XmlResourceParserpullParser,StringtagName){List<Map<String,Object>>list=null;Map<String,Object>map=null;intevent;try{//根据读取的xml节点来获取事件类型event=pullParser.getEventType();//只要不是文档结束就一直执行循环while(event!=XmlPullParser.END_DOCUMENT){//获取每个节点的节点名称StringnodeName=pullParser.getName();//根据事件类型来执行不同的操作switch(event){//当文档开始就实例化listcaseXmlPullParser.START_DOCUMENT:list=newArrayList<Map<String,Object>>();break;//根据节点的不同来执行实例化map和往map中添加数据的操作caseXmlPullParser.START_TAG:if(nodeName.equals(tagName)){map=newHashMap<String,Object>();//本例中,没有文本节点,有n个属性节点,而所需要的内容全在属性节点中。故使用getAttributeValue(index)方法//getAttributeValue(index)方法中的//index是指节点的索引下标,从0开始。可以理解成属性点顺序。map.put(pullParser.getAttributeValue(3),pullParser.getAttributeValue(2));list.add(map);}break;}//执行循环event=pullParser.next();}}catch(Exceptione){e.printStackTrace();}returnlist;}

6、原生文件资源:raw

【备注:】raw目录下主要放置的资源有音频、视频等文件。raw目录下的文件会在R.java中被注册。

如何访问raw目录下的文件?

InputStream is = getResources().openRawResource(R.raw.文件名);

7、图像资源:

A、普通图像资源:

Java文件中获取方式:
getResources().getDrawable(R.drawable.p_w_picpathname);

int resId = getResources().getIdentifier(imgName, "drawable",this.getPackageName());

view.getResources().getResourceName(resid)

int resId = context.getResources().getIdentifier("图片名称", "drawable",context.getPackageName());
p_w_picpathView_main_showpic.setImageResource(resId);

B、xml图像资源:bitmap

bitmapandroid:gravity

C、图层(Layer)资源:layer-list

<?xmlversion="1.0"encoding="utf-8"?><layer-listxmlns:android="http://schemas.android.com/apk/res/android"><itemandroid:top="10dp"android:left="10dp"><bitmapandroid:src="@drawable/android1"android:gravity="center"/></item><itemandroid:top="10dp"android:left="10dp"><bitmapandroid:src="@drawable/android2"android:gravity="center"/></item></layer-list>

D、图像状态(State)资源:selector

<?xmlversion="1.0"encoding="utf-8"?><selectorxmlns:android="http://schemas.android.com/apk/res/android"><itemandroid:state_pressed="true"android:drawable="@drawable/pressed"/><itemandroid:state_focused="true"android:drawable="@drawable/focused"/><itemandroid:drawable="@drawable/normal"/></selector>

E、图像级别(Level)资源:level-list

//UI代码:<?xmlversion="1.0"encoding="utf-8"?><level-listxmlns:android="http://schemas.android.com/apk/res/android"><itemandroid:drawable="@drawable/lamp_off"android:minLevel=“5"android:maxLevel="10"/><itemandroid:drawable="@drawable/lamp_on"android:minLevel=“11"android:maxLevel="20"/></level-list>

//java代码:publicclassLevelActivityextendsActivity{privateImageViewp_w_picpathview_lamp;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_level);p_w_picpathview_lamp=(ImageView)findViewById(R.id.p_w_picpathview_lamp);}publicvoidclickButton(Viewview){switch(view.getId()){caseR.id.button_level_lampoff:p_w_picpathview_lamp.setImageLevel(9);break;caseR.id.button_level_lampon:p_w_picpathview_lamp.setImageLevel(15);break;}}}

F、淡入淡出(CrossFade)资源:transition

<?xmlversion="1.0"encoding="utf-8"?><transitionxmlns:android="http://schemas.android.com/apk/res/android"><!--transition标签中只能有两个item标签,也就是只支持两个图像的切换--><itemandroid:drawable="@drawable/lamp_off"/><itemandroid:drawable="@drawable/lamp_on"/></transition>

//java代码:publicclassCrossfadeActivityextendsActivity{privateImageViewp_w_picpathview_lamp;privateTransitionDrawabledrawable=null;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_crossfade);p_w_picpathview_lamp=(ImageView)findViewById(R.id.p_w_picpathview_lamp);drawable=(TransitionDrawable)p_w_picpathview_lamp.getDrawable();}publicvoidclickButton(Viewview){switch(view.getId()){caseR.id.button_level_lampon:drawable.startTransition(3000);break;caseR.id.button_level_lampoff:drawable.reverseTransition(3000);break;}}}

G、外形(Shape)资源:shape

<?xmlversion="1.0"encoding="utf-8"?><shapexmlns:android="android:shape="rectangle"><!--shape有四个值:rectangle(矩形)、oval(椭圆)、line(直线)、ring(圆环)--><!--定义渐变色,从左下角到右上角绘制渐变色--><gradientandroid:startColor="#FF00"android:endColor="#80FF00FF"android:angle="45"/><!--定义控件内容到边界的距离--><paddingandroid:left="20dp"android:top="20dp"android:right="20dp"android:bottom="20dp"/><!--定义边框线的宽度及颜色--><strokeandroid:width="2dp"android:color="#00F"/><!--定义圆角半径--><cornersandroid:radius="8dp"/></shape>