Android资源访问

一、资源访问:

(一)、概念:

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

(二)、资源分类:

  1. id;
  2. 字符串资源文件;
  3. 颜色资源
  4. 尺寸资源文件
  5. 布局资源
  6. 数组资源
  7. 样式和主题资源
  8. 菜单资源
  9. 已编译的任意XML资源文件【重要】: res/xml
  10. 未编译的原始资源文件: res/raw
  11. 图像(Drawable)资源
    1. 普通图像资源
    2. xml图像资源:bitmap
    3. 图层(Layer)资源:layer-list , item
    4. 图像状态(State)资源:selector , item
    5. 图像级别(Level)资源:level-list , item
    6. 淡入淡出(CrossFade)资源:transition , item(只支持两个)
    7. 外形(Shape)资源:shape(shape , gradient , padding ,corners , stroke)
  12. 动画资源
  • 透明度补间动画    alpha
  • 缩放补间动画    scale
  • 旋转补间动画    rotate
  • 移动补间动画     translate
  1. 属性动画:res/animator   (api11之后出现)
  2. 逐帧动画: res/anim      animation-list , item
  3. 补间动画:  res/anim

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

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

1、字符串资源文件:

示例代码:

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

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

2、颜色资源文件:

示例代码:

<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);

3、尺寸资源文件:

示例代码:

<resources>
    <dimen  name="title">20dp</color>
    <dimen  name="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-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);

5、原始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;
        }

6、原生文件资源: raw

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

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

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

7、图像资源:

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:gravity

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

<?xml version="1.0"encoding="utf-8"?>
<layer-list xmlns: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代码:
<?xml version="1.0"encoding="utf-8"?>
<level-list xmlns: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代码:
public class LevelActivity extends Activity {

    private ImageView imageview_lamp;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_level);
        imageview_lamp = (ImageView) findViewById(R.id.imageview_lamp);

    }

    public void 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;
        }
    }
}

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

<?xml version="1.0"encoding="utf-8"?>

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

<!-- transition标签中只能有两个item标签,也就是只支持两个图像的切换 -->

    <itemandroid:drawable="@drawable/lamp_off"/>

    <itemandroid:drawable="@drawable/lamp_on"/>

</transition>
//java代码:
public class CrossfadeActivity extends Activity {

    private ImageView imageview_lamp;

    private TransitionDrawable drawable = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_crossfade);

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

        drawable = (TransitionDrawable) imageview_lamp.getDrawable();
    }

    public void 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;

        }
    }
}

G、外形(Shape)资源:shape

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

<shape
    xmlns: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>
时间: 2024-10-12 21:57:55

Android资源访问的相关文章

Android资源使用详解(一)

一.Android资源简介 Android应用资源可分为两大类:(1)无法通过R清单类访问的原生资源,保存在assets目录下;(2)可通过R资源清单类访问的资源,保存在res目录下.其中,res目录下应用资源介绍如下: 目录Directory 资源类型Resource Types res/anim/ XML文件,它们被编译进逐帧动画(frame by frame animation)或补间动画(tweened animation)对象 res/drawable/ .png..9.png..jp

android中的用户资源访问(一)

这几天要总结一下android开发中的用户资源访问. android中的用户资源存在项目工程中res文件夹下,有字符串.颜色.大小.数组.布局.样式.主题等资源,这些资源可以在xml文件中引用,也可以在android源码文件中使用,今天总结一下字符串.颜色.大小.数组.布局和图片资源. 总的来说,在xml文件中引用的格式为[<package>.]@/XXX/name:在源码中引用格式是[<package>.]R.XXX.name. 先贴上在xml文件中引用的代码(在布局xml文件中

Android资源文件之创建与访问

资料来源于官方api文档 Android资源文件之创建与访问 Android适配之创建别名资源 如果你想将某一资源用于多种设备配置(但是不想作为默认资源提供), 则无需将同一资源放入多个备用资源目录中.相反,可以(在某些情况下)创建备用资源,充当保存在默认资源目录下的资源的别名. 注: 并非所有资源都会提供相应的机制让你创建指向其他资源的别名.特别是, xml/目录中的动画资源.菜单资源.原始资源以及其他未指定的资源均不提供此功能. 例如,加入你有有一个应用图片icon.jpg, 并且需要不同区

Android全局资源访问

package com.example.metrox.l12; import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.

Android之XML资源访问

颜色资源 <span style="font-size:18px;"><resources> <color name="red">#f00</color> <color name="green">#0f0</color> <color name="blue">#00f</color> </resources></s

Android 资源

Android资源分两类: 无法通过R清单类访问的原生资源,保存在assets目录下,R资源类的路径:..\build\generated\source\r\debug\工程名 可以通过R清单类访问的原生资源,保存在res目录下 Resources类:资源管理类 Context.getResources()方法获取Resources对象 Context.getAssets()获取访问/assets目的资源的AssetManager对象 getXxx(int id):根据资源Id获取实际的资源 X

Android资源文件简介

Android资源文件简介 1. Android应用资源的作用 (1) Android项目中文件分类 在Android工程中, 文件主要分为下面几类 : 界面布局文件, Java src源文件, 资源文件; -- 界面布局文件 : 在res/layout目录下定义, 用于定义Android中界面的显示样式; -- Java源码文件 : Android程序的逻辑实现, 程序主体; -- 资源文件 : 各种XML文件, 可以定义图片等资源, 以及各种图片, 音频, 视频, 3d模型等资源; (2)

Android Permission 访问权限大全(转)

程序执行需要读取到安全敏感项必需在androidmanifest.xml中声明相关权限请求, 完整列表如下: android.permission.ACCESS_CHECKIN_PROPERTIES允许读写访问”properties”表在 checkin数据库中,改值可以修改上传( Allows read/write access to the “properties” table in the checkin database, to change values that get upload

SEAndroid安全机制对Android属性访问的保护分析

Android系统通过属性暴露设备和运行时信息,并且可以通过设置属性来控制系统行为.因此,属性也像文件一样,是一种需要保护的资源.在启用SEAndroid之前,敏感属性只能被预先设定的进程进行设置.启用SEAndroid之后,敏感属性会进一步被SEAndroid安全策略保护.这样就可以更有效地保护系统属性了.在本文中,我们就详细分析SEAndroid安全机制对Android属性设置保护提供的支持. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! 在分析SE