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>
複製代碼