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