自用Android資源訪問

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. 動畫資源
    1. 屬性動畫:res/animator   (api11之後出現)   
    2. 逐幀動畫: res/anim      animation-list , item
    3. 補間動畫:  res/anim
      • 透明度補間動畫    alpha
      • 縮放補間動畫    scale
      • 旋轉補間動畫    rotate
      • 移動補間動畫     translate
【備註:】資源編譯器會編譯除了raw資源以外的所有資源,並將它們全部放到最終的.apk文件中。apk(Android Package)包含Android應用程序的代碼和資源。

13、attr資源


(三)、各種資源文件的xml格式:
1、字符串資源文件:
示例代碼:
<resources>
<string  name="red">紅色</color>
<string  name="green">綠色</color>
<string  name="blue">藍色</color>
  </resources>

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

   <color name="red">#f00</color>
    <color name="green">#0f0</color>

2、顏色資源文件:
示例代碼:
<resources>
    <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: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
<?xmlversion="1.0"encoding="utf-8"?>
<selectorxmlns:android="http://schemas.android.com/apk/res/android">
<itemandroid:state_pressed="true"android:drawable="@drawable/pressed"/>
<itemandroid:state_focused="true"android:drawable="@drawable/focused"/>
<itemandroid: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>












發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章