Android基礎(chǔ)05-Android資源訪問

一、資源訪問:【掌握】

(一)、概念:

? ? Android中的資源是指可以在代碼中使用的外部文件,這些文件作為應用程序的一部分,被編譯到應用程序中。在項目中,這些資源被保存到Android應用的res目錄下。

(二)、資源分類:

id;

字符串資源文件;

顏色資源

尺寸資源文件

布局資源

數(shù)組資源

樣式和主題資源

菜單資源

已編譯的任意XML資源文件【重要】: res/xml

未編譯的原始資源文件: res/raw

圖像(Drawable)資源

普通圖像資源

xml圖像資源:bitmap

圖層(Layer)資源:layer-list , item

圖像狀態(tài)(State)資源:selector , item

圖像級別(Level)資源:level-list , item

淡入淡出(CrossFade)資源:transition , item(只支持兩個)

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

動畫資源

屬性動畫:res/animator ? (api11之后出現(xiàn))

逐幀動畫: res/anim ? ? ?animation-list , item

補間動畫: ?res/anim

透明度補間動畫 ? ?alpha

縮放補間動畫 ? ?scale

旋轉(zhuǎn)補間動畫 ? ?rotate

移動補間動畫 ? ? translate

【備注:】資源編譯器會編譯除了raw資源以外的所有資源,并將它們?nèi)糠诺阶罱K的.apk文件中。apk(Android Package)包含Android應用程序的代碼和資源。

13、attr資源

(三)、各種資源文件的xml格式:

1、字符串資源文件:

示例代碼:

紅色

綠色

藍色


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

2、顏色資源文件:

示例代碼:

? ? #f00

? ? #0f0

? ? #00f


在需要調(diào)用該顏色的地方寫法是:android:background="@color/blue"

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

3、尺寸資源文件:

示例代碼:

? ? 20dp

? ? 10dp


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

4、數(shù)組資源文件:

? ? Android中,不推薦將數(shù)組直接定義在java文件中,而是使用數(shù)組資源文件來定義數(shù)組。

? ? 定義在res下values目錄下:arrays.xml文件中。格式如下:

根元素:

子元素:可以有三種。

:稱為類型數(shù)組Typed-Array資源(或者:資源數(shù)組資源)

下級子元素:數(shù)值

示例代碼:


? ? ? ? 主屏模式

? ? ? ? wifi設(shè)置

? ? ? ? 藍牙設(shè)置

? ? ? ? 網(wǎng)絡(luò)設(shè)置

? ? ? ? More


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

【備注:】如果是int型數(shù)組,則格式如下:


? ? ? ? 20

? ? ? ? 30

? ? ? ? 40

? ? ? ? 50


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

【備注:】如果是資源數(shù)組資源,則格式如下:


? ? ? ? @drawable/home

? ? ? ? @drawable/setting

? ? ? ? @drawable/logout



? ? ? ? 首頁

? ? ? ? 設(shè)置

? ? ? ? 退出


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 對象繼續(xù)解析,獲取到xml節(jié)點中需要的數(shù)據(jù)。

? ? //備注:XmlResourceParser 類是XmlPullParser的子類

? ? public List> parseXML(XmlResourceParser pullParser,

? ? ? ? ? ? ? ? ? ? ? ? String tagName) {

? ? ? ? ? ? ? ? List> list = null;

? ? ? ? ? ? ? ? Map map = null;

? ? ? ? ? ? ? ? int event;

? ? ? ? ? ? ? ? try {

? ? ? ? ? ? ? ? ? ? ? ? // 根據(jù)讀取的xml節(jié)點來獲取事件類型

? ? ? ? ? ? ? ? ? ? ? ? event = pullParser.getEventType();

? ? ? ? ? ? ? ? ? ? ? ? // 只要不是文檔結(jié)束就一直執(zhí)行循環(huán)

? ? ? ? ? ? ? ? ? ? ? ? while (event != XmlPullParser.END_DOCUMENT) {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 獲取每個節(jié)點的節(jié)點名稱

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? String nodeName = pullParser.getName();

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 根據(jù)事件類型來執(zhí)行不同的操作

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? switch (event) {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 當文檔開始就實例化list

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? case XmlPullParser.START_DOCUMENT:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? list = new ArrayList>();

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 根據(jù)節(jié)點的不同來執(zhí)行實例化map和往map中添加數(shù)據(jù)的操作

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? case XmlPullParser.START_TAG:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if (nodeName.equals(tagName)) {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? map = new HashMap();

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 本例中,沒有文本節(jié)點,有n個屬性節(jié)點,而所需要的內(nèi)容全在屬性節(jié)點中。故使用getAttributeValue(index)方法

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // getAttributeValue(index)方法中的

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // index是指節(jié)點的索引下標,從0開始??梢岳斫獬蓪傩渣c 順序。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? map.put(pullParser.getAttributeValue(3),

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? pullParser.getAttributeValue(2));

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? list.add(map);

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? break;

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // 執(zhí)行循環(huán)

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 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、圖像狀態(tài)(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"/>


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容