1. 程式人生 > >Android學習筆記:Android資源總結

Android學習筆記:Android資源總結

Android應用資源可分為兩大類:

1、無法直接訪問的原生資源,儲存在asset目錄下,應用程式可以使用AssetManager來訪問這些資源

2、可以通過R資源清單類訪問的資源,儲存在res目錄下

先來看原生資源,指的就是跟android無任何關係可以獨立存在的檔案,在android專案中經常放置的位置有:asset目錄、/res/raw/目錄、/res/xml/目錄(該目錄只放xml)。

獲取這些地方的原聲資源的方法:

asset:

AssetManager am = getAssets();    //獲取該應用的AssetManager

AssetFileDescriptor afd = am.openFd("shot.mp3");    //獲取指定檔案對應的AssetFileDescriptor

MediaPlayer mediaPlayer = new MediaPlayer();

mediaPlayer.setDataSource(afd.getFileDescriptor());    //使用MediaPlayer載入指定的聲音檔案

/res/raw/目錄:

Android SDK會在R清單類中為該目錄下的資源生成一個索引項

MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.bomb);

或者 java程式碼中通過呼叫Resources的openRawResource(int id)方法來獲取該資源的二進位制輸入流。

/res/xml/目錄:

通過getXml(int id)獲取XmlResourceParser,通過XmlResourceParser對該xml進行pull解析

也可以通過openRawResource(int id)獲取對應的輸入流進行操作。

看完了原生資源之後,接下來我們分析一下Android應用資源,存放的路徑為/res/路徑下的各個子目錄

非原生資源中的資源根據標籤又可以分為兩類:resource資源和非resrouce資源

其中,resource資源中存放各種簡單的xml檔案,包括字串值、整數值、顏色值、陣列等一個簡單的常量。

而非resource資源包括很多種,他們和resource的區別就是這一類檔案可以說是一個組合的效果,是帶有邏輯在裡面的,不像resource資源就一簡單常量。

resource資源包括:string、color、array、style、dimen、boolean、integer...

非resource資源包括:anim、color、drawable、menu(這裡的color和上面的color的區別是此處的color檔案不是一個些簡單的常量組合成,而是帶有邏輯關係)

resource資源很簡單,所有的父標籤統一是<resource>,只是不同的資源對應的子標籤不同,統一的格式如下:

<resource>

    <子標籤名 name="xxx">xxx</子標籤名>

    ......

    ......

</resource>

array資源的每個子標籤下面還有一些<item>標籤,作為陣列的值。

下面我們關鍵來看非resource資源:

AnimationDrawable,該資源可放置在/res/anim/路徑下。

動畫資源的父標籤<set>,有四個子標籤可以指定:<alpha>、<scale>、<translate>、<rotate>,在指定rotate的時候要設定pivotX和pivotY為變換的“中心點”

使用也非常簡單:

Animation anim = AnimationUtils.loadAnimation(context,R.anim.my_anim);


StateListDrawable,用於組織多個Drawable物件,當使用該資源的時候,StateListDrawable物件所顯示的Drawable物件會隨著目標元件狀態的改變而自動切換

該資源的父標籤<selector>,可以包含多個子標籤<item>,該子標籤可以指定如下屬性:

1、android:color或者android:drawable

2、android:state_xxx,指定一個特殊狀態

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

    <item android:color="hex_color" android:state_pressed=["true" | "false"]/>

</selector>


LayerDrawable,可以包含一個Drawable陣列,系統會按這些Drawable物件的陣列順序來繪製他們,索引最大的Drawable物件將會被繪製在最上面

該資源的父標籤<layer-list>,可以包含多個子標籤<item>,該子標籤可以指定如下屬性:

1、android:drawable

2、android:id

3、android:buttom | top | left | right,用於指定一個長度值,用於指定將該Drawable物件繪製到目標元件的指定位置。

<layer-list xmlns:android=http://schemas.android.com/apk/res/android>

    <item android:id="@android:id/background" androdi:drawable="@drawable/grow"/>

    ......

    <item>

        <bitmap android:src="@drawable/icon" android:gravity="center"/>

    </item>

    ....

</layer-list>


ShapeDrawable,用於定義一個基本的幾何圖形的形狀和屬性

該資源的父標籤<shape>,可以指定屬性:android:shape=["rectangle" | "oval" | "line" | "ring"],可以包含多個子標籤<corners>、<gradient>、<padding>、<size>、<solid>、<stroke>,該子標籤可以指定如下屬性:

定義ShapeDrawable物件的完整語法格式如下:

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape=["rectangle" | "oval" | "line" | "ring"]>

    <!-- 定義幾何圖形的四個角的弧度-->

    <corners

        android:radius="integer"

        android:topLeftRadius="integer"

        android:topRightRadius="integer"

        android:bottomLeftRadius="integer"

        android:bottomRightRadius="integer"/>



    <!--定義使用漸變色填充  -->

    <gradient

        android:angle="integer"

        android:centerX="integer"

        android:centerY="integer"

        android:centerColor="integer"

        android:endColor="color"

        android:gradientRadius="integer"

        android:startColor="color"

        android:type=[ " linear" | "radial" | "sweep"]

        android:useslevel=["true" |"false"]/>



    <!-- 定義幾何形狀的內邊框 -->

    <padding

        android:left="integer"

        android:top="integer"

        android:right="integer"

        android:bottom="integer"/>

  

    <!-- 定義幾何圖形的大小 -->

    <size

        android:width="integer"

        android:color="color"

        android:dashWidth="integer"

        android:dashGap="integer"/>



    <!-- 定義使用單種顏色填充 -->

    <solid

        android:color="color"/>



    <!-- 定義為幾何圖形繪製邊框 -->

    <stroke

        android:width="integer"

        android:color="color“

        android:dashWidth="integer"

        android:dashGap="integer"/>

</shape>




ClipDrawable資源,代表從其他為圖上擷取的一個“圖片片斷”,使用標籤<clip>可以指定如下屬性:

1、android:drawable,指定擷取的源drawable物件

2、android:clipOrientation,指定擷取方向

3、android:gravity,指定擷取時對齊方式

使用ClipDrawable物件時,可呼叫setLevel(int level)方法來設定擷取的區域大小,當level為0時,擷取的圖片片斷為空;當level為10000時,擷取整張圖片

選單資源,通常放在/res/menu/目錄下,父標籤為<menu>,且無需指定任何屬性,可以包含如下子標籤:

1、<item>

    a、android:id

    b、android:title

    c、android:icon

    d、android:alphabeticShortCut,為選單項指定字元快捷鍵

    e、android:numericShortCut,為選單項指定數字快捷鍵

    f、android:checkable,設定該選單項是否可選

    g、android:checked,設定該選單項是否已選中

    h、android:visible

    i、android:enable

2、<group>,可以包含多個<item>

3、checkableBehavior指定選單的選擇行為,可選擇none、all、single

4、visible

5、enable