Android基础05-Android资源访问

一、资源访问:【掌握】

(一)、概念:

    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)

动画资源

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

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

补间动画:  res/anim

透明度补间动画    alpha

缩放补间动画    scale

旋转补间动画    rotate

移动补间动画     translate

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

13、attr资源

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

1、字符串资源文件:

示例代码:

红色

绿色

蓝色


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

2、颜色资源文件:

示例代码:

    #f00

    #0f0

    #00f


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

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

3、尺寸资源文件:

示例代码:

    20dp

    10dp


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

4、数组资源文件:

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

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

根元素:

子元素:可以有三种。

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

下级子元素:数值

示例代码:


        主屏模式

        wifi设置

        蓝牙设置

        网络设置

        More


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

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


        20

        30

        40

        50


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

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


        @drawable/home

        @drawable/setting

        @drawable/logout



        首页

        设置

        退出


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> parseXML(XmlResourceParser pullParser,

                        String tagName) {

                List> list = null;

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

                                        break;

                                // 根据节点的不同来执行实例化map和往map中添加数据的操作

                                case XmlPullParser.START_TAG:

                                        if (nodeName.equals(tagName)) {

                                                map = new HashMap();

                                                // 本例中,没有文本节点,有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

android:src="@drawable/android1"

android:gravity="center"/>

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


android:top="10dp"

android:left="10dp">

android:src="@drawable/android1"

android:gravity="center"/>

android:top="10dp"

android:left="10dp">

android:src="@drawable/android2"

android:gravity="center"/>

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


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

//UI代码:


android:drawable="@drawable/lamp_off"

android:minLevel=“5"  android:maxLevel="10"/>

android:drawable="@drawable/lamp_on"

android:minLevel=“11"  android:maxLevel="20"/>

//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



//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


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

android:shape="rectangle”>




android:startColor="#FF00"

android:endColor="#80FF00FF"

android:angle="45"/>


android:left="20dp"

android:top="20dp"

android:right="20dp"

android:bottom="20dp"/>


android:width="2dp"

android:color="#00F"/>

android:radius="8dp"/>


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容