Android的資源文件可以存放在如下的兩個地方:
①可以通過R資源清單類訪問的資源,位於/res/目錄下,Android SDK會處理該目錄下的資源,在R類清單文件中,爲該目錄下的資源生成一個索引項;
在該目錄下存放着大量常用資源:
/res/animator/ :存放定義屬性動畫的XML文件資源。
/res/anim/ :存放定義補間動畫的XML文件資源。
/res/color/ :存放定義不同狀態下顏色列表的XML文件資源 。
/res/drawable/ :存放定義各種位圖文件的XML文件資源,也可以是編譯成的各種對象。
/res/layout/ :存放定義用戶界面佈局的XML文件資源 。
/res/menu/ :存放爲應用程序定義的各種菜單資源的XML文件。
/res/raw/ :存放任意類型的原生資源(比如音頻文件、視頻文件等)。
實際上可以通過調用Resources對象的openRawResources(int id)方法來獲取該資源的二進制輸入流。也可以將這些原生資源放在/assets/目錄下,然後通過AssetManager來訪問。
/res/values/ :存放各種簡單的XML文件(字符串值、整數值、顏色值、數組等)。
/res/xml/ :存放任意原生的XML文件資源,可以通過Resources.getXML( )訪問。
②無法通過R資源清單類訪問的原生資源,位於/assets/目錄下,該目錄下的資源是更徹底的原始資源,Android應用會使用AssetManager來管理該目錄下的原始資源。
爲了通過資源清單項來獲取實際資源,可以藉助於Android提供的Resources類。可以把Resources類理解爲“Android資源的訪問總管家”,Resources類提供了大量的方法來根據資源清單ID獲取實際資源。
Resources類主要提供瞭如下兩類方法:
(1)getXxx(int id):根據資源清單ID來獲取實際資源;
(2)getAssets:獲取訪問/assets/目錄下資源的AssetsManager資源管理器對象;
注意:Resources由Context調用getResources( )方法來獲取的。
context.getResources()用法總結:
1.獲取屏幕方向int類型:1:portrait,2:landscape
context.getResources().getConfiguration().orientation;
2、把資源文件放到應用程序的/res/raw下,以openRawResource方法來獲取該資源的二進制輸入流(不帶後綴的資源文件名)打開這個文件:
//(資源文件名爲index.html, 不需要帶後綴.html)
InputStream fs =this.getResources().openRawResource(R.raw.index);
InputStreamReader read = new InputStreamReader (fs,"utf-8");
BufferedReader in = new BufferedReader(read);
3、讀取res/drawable目錄下的png或者bmp
以數據流的方式讀取資源:
//得到Resources對象
Resources resource = this.getContext().getResources();
Inputstream is = resource.openRawResource(R.drawable.mm_image);
BitmapDrawable bmpDraw = new BitmapDrawable(is);
Bitmap bmp = bmpDraw.getBitmap();
如果需要利用圖片解碼器,如下使用:
InputStream is = getResources().openRawResource(R.drawable.icon);
Bitmap mBitmap = BitmapFactory.decodeStream(is);
Paint mPaint = new Paint();
canvas.drawBitmap(mBitmap, 40, 40, mPaint);
//獲取屏幕密度
float density = getResources().getDisplayMetrics().density;
4、getDimension、getDimensionPixelOffset和getDimensionPixelSize區別:
getDimension和getDimensionPixelOffset的功能類似,都是獲取某個dimen的值,但是如果單位是dp或sp,則需要將其乘以density,如果是px,則不用乘density。並且getDimension返回float,getDimensionPixelOffset返回int。而getDimensionPixelSize則不管寫的是dp還是sp還是px,都會乘以denstiy。
調用:Context.getResources().getDimensionPixelSize();
5、Context.getResources().getColor(R.color.colorId);//獲取顏色資源
6、Context.getResources().getString(R.string.stringId);//獲取字符串資源
7、獲取字符串數組:String[] roles = context.getResources().getStringArray(R.array.array_role_values);
文件路徑是:\values\array.xml:
<string-array name="array_role_values">
<item>3</item>
<item>4</item>
<item>15</item>
<item>11</item>
<item>25</item>
<item>24</item>
<item>7</item>
<item>14</item>
<item>22</item>
<item>8</item>
<item>9</item>
</string-array>