Android资源访问

Android资源访问java

1、资源访问:【掌握】 (一)、概念: Android中的资源是指能够在代码中使用的外部文件,这些文件做为应用程序的一部分,被编译到应用程序中。在项目中,这些资源被保存到Android应用的res目录下。node

(二)、资源分类: 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) 动画资源 逐帧动画: res/anim animation-list , item 补间动画: res/anim 透明度补间动画 alpha 缩放补间动画 scale 旋转补间动画 rotate 移动补间动画 translate 三、属性动画:res/animatorandroid

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

(三)、各类资源文件的xml格式: 一、字符串资源文件: 示例代码:bash

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

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

二、颜色资源文件: 示例代码:网络

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

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

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

三、尺寸资源文件: 示例代码:ide

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

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

四、数组资源文件: Android中,不推荐将数组直接定义在java文件中,而是使用数组资源文件来定义数组。 定义在res下values目录下:arrays.xml文件中。格式以下:布局

根元素: 子元素:能够有三种。 :称为类型数组Typed-Array资源(或者:资源数组资源) 下级子元素:数值动画

示例代码:ui

<resources>
    <string-array name="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-array name="age"> 
        <item >20</item>
        <item >30</item>
        <item >40</item>
        <item >50</item>
    </integer-array>
</resources>

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

【备注:】若是是资源数组资源,则格式以下:
<resources>
    <array name="icons"> 
        <item >@drawable/home</item>
        <item >@drawable/setting</item>
        <item >@drawable/logout</item>
    </array>
    <array name="title"> 
        <item >首页</item>
        <item >设置</item>
        <item >退出</item>
    </array>
</resources>

Java文件中获取方式:
TypedArray  arrIcons = getResources().obtainTypedArray(R.array.icons);
Drawable drawable = arrIcons.getDrawable(0);
复制代码

五、原始XML资源【重要】 位置:res/xml目录下; 定义格式:格式良好的,没有特殊要求的普通xml文件; Java文件中获取方式:getResources().getXml(R.xml.文件名称); 解析xml的核心代码:

// 从资源文件夹中读取原始xml资源文件
    XmlResourceParser pullParser = getResources().getXml(R.xml.citylist);
    //将读取xml资源文件返回的XmlResourceParser 对象继续解析,获取到xml节点中须要的数据。
    //备注:XmlResourceParser 类是XmlPullParser的子类
    public List<Map<String, Object>> parseXML(XmlResourceParser pullParser,
                        String tagName) {
                List<Map<String, Object>> list = null;
                Map<String, Object> map = null;
                int event;
                try {
                        // 根据读取的xml节点来获取事件类型
                        event = pullParser.getEventType();
                        // 只要不是文档结束就一直执行循环
                        while (event != XmlPullParser.END_DOCUMENT) {
                                // 获取每一个节点的节点名称
                                String nodeName = pullParser.getName();
                                // 根据事件类型来执行不一样的操做
                                switch (event) {
                                // 当文档开始就实例化list
                                case XmlPullParser.START_DOCUMENT:
                                        list = new ArrayList<Map<String, Object>>();
                                        break;
                                // 根据节点的不一样来执行实例化map和往map中添加数据的操做
                                case XmlPullParser.START_TAG:
                                        if (nodeName.equals(tagName)) {
                                                map = new HashMap<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 (Exception e) {
                        e.printStackTrace();
                }
                return list;
        }

复制代码

六、原生文件资源: raw

【备注:】raw目录下主要放置的资源有音频、视频等文件。raw目录下的文件会在R.java中被注册。
        如何访问raw目录下的文件?
        InputStream is = getResources().openRawResource(R.raw.文件名);
复制代码

七、图像资源: A、普通图像资源:

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

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

view.getResources().getResourceName(resid)

int resId = context.getResources().getIdentifier("图片名称", "drawable", context.getPackageName()); 
imageView_main_showpic.setImageResource(resId);
复制代码

B、xml图像资源:bitmap

<bitmap

android:src="@drawable/android1"

android:gravity="center"/>
复制代码

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

<?xmlversion="1.0"encoding="utf-8"?>

<layer-listxmlns:android="http://schemas.android.com/apk/res/android">

<item

android:top="10dp"

android:left="10dp">

<bitmap

android:src="@drawable/android1"

android:gravity="center"/>

</item>

<item

android:top="10dp"

android:left="10dp">

<bitmap

android:src="@drawable/android2"

android:gravity="center"/>

</item>

</layer-list>
复制代码

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

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/pressed"/>
<item android:state_focused="true" android:drawable="@drawable/focused"/>
<item android: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">

<item

android:drawable="@drawable/lamp_off"

android:minLevel=“5" android:maxLevel="10"/> <item android:drawable="@drawable/lamp_on" android:minLevel=“11"  android:maxLevel="20"/>

</level-list>


//java代码:

publicclass LevelActivity extends Activity {

private ImageView imageview_lamp;


@Override

protectedvoid onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_level);

imageview_lamp = (ImageView) findViewById(R.id.imageview_lamp);

}




publicvoid clickButton(View view) {

switch (view.getId()) {

case R.id.button_level_lampoff:

imageview_lamp.setImageLevel(9);

break;

case R.id.button_level_lampon:

imageview_lamp.setImageLevel(15);

break;

default:

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代码:

publicclass CrossfadeActivity extends Activity {

private ImageView imageview_lamp;

private TransitionDrawable drawable = null;




@Override

protectedvoid onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_crossfade);

imageview_lamp = (ImageView) findViewById(R.id.imageview_lamp);

drawable = (TransitionDrawable) imageview_lamp.getDrawable();

}

publicvoid clickButton(View view) {

switch (view.getId()) {

case R.id.button_level_lampon:

drawable.startTransition(3000);

break;

case R.id.button_level_lampoff:

drawable.reverseTransition(3000);

break;

default:

break;

}

}

}
复制代码

G、外形(Shape)资源:shape

<?xmlversion="1.0"encoding="utf-8"?>

<shape

xmlns:android="http://schemas.android.com/apk/res/android"

android:shape="rectangle”> <!-- shape有四个值:rectangle(矩形)、oval(椭圆)、line(直线)、ring(圆环)--> <!-- 定义渐变色 ,从左下角到右上角绘制渐变色--> <gradient android:startColor="#FF00"

android:endColor="#80FF00FF"

android:angle="45"/>



<!-- 定义控件内容到边界的距离-->

<padding

android:left="20dp"

android:top="20dp"

android:right="20dp"

android:bottom="20dp"/>



<!-- 定义边框线的宽度及颜色-->

<stroke

android:width="2dp"

android:color="#00F"/>



<!-- 定义圆角半径-->

<corners

android:radius="8dp"/>

</shape>
复制代码
相关文章
相关标签/搜索