【庫】res/raw與assets區(qū)別:http://blog.csdn.net/chdjj/article/details/19154687
在Android開發(fā)中,資源文件是我們使用頻率最高的嗽交,無論是string压状,drawable,還是layout,這些資源都是我們經(jīng)常使用到的捞蚂,而且為我們的開發(fā)提供了很多方便,不過我們平時接觸的資源目錄一般都是下面這三個:
當(dāng)然了跷究,Android資源文件還有其他類型,如下圖所示:
這些資源都需要通過相應(yīng)的資源類來進(jìn)行管理敲霍。
下面請看管理這些資源的相關(guān)類:
int getColor(int id) //對應(yīng)res/values/colors.xml
Drawable getDrawable(int id) //對應(yīng)res/drawable/
XmlResourceParser getLayout(int id) //對應(yīng)res/layout/
String getString(int id) 和CharSequence getText(int id) //對應(yīng)res/values/strings.xml
InputStream openRawResource(int id) //對應(yīng)res/raw/
void parseBundleExtra (String tagName, AttributeSet attrs, Bundle outBundle) //對應(yīng)res/xml/
String[] getStringArray(int id) //對應(yīng)res/values/arrays.xml
float getDimension(int id) //對應(yīng)res/values/dimens.xml
下面讓我們分別來介紹這些資源文件及使用方法俊马。
1. 字符串:
字符串存儲在/res/values/strings.xml文件中,它的格式比較簡單肩杈,這里不再詳述柴我。正如上面所說,讀取字符串需要通過如下代碼:
String str = getResources().getString(R.string.hello);
CharSequence cha = getResources().getText(R.string.app_name);
2.字符串?dāng)?shù)組:
字符串?dāng)?shù)組存儲在/res/values/arrays.xml
文件中扩然,它的格式如下代碼所示:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="flavors">
<item>Vanilla</item>
<item>Chocolate</item>
<item>Strawberry</item>
</string-array>
</resources>
獲取字符數(shù)組內(nèi)容需要通過如下方式:
String strs[] = getResources().getStringArray(R.array.flavors);
3.顏色值:
顏色存儲在/res/values/colors.xml
文件中艘儒,格式如下:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="text_color">#F00</color>
</resources>
顏色值是一個整數(shù),只需要通過R.color.
獲取即可夫偶。
4.尺寸值:
尺寸存儲在/res/values/dimens.xml文件中界睁,格式如下:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="txt_app_title">22sp</dimen>
<dimen name="font_size_10">10sp</dimen>
<dimen name="font_size_12">12sp</dimen>
<dimen name="font_size_14">14sp</dimen>
<dimen name="font_size_16">16sp</dimen>
</resources>
獲取尺寸使用下列代碼:
float myDimen = getResources().getDimension(R.dimen.dimen標(biāo)簽name屬性的名字);
另外,需要注意的是:尺寸不同的單位代表的值不一樣兵拢,具體看下圖:
官方推薦我們使用dp和sp進(jìn)行表示翻斟,當(dāng)然因情況而已,也可使用其他的尺寸说铃。下同是一個簡單的尺寸轉(zhuǎn)換類访惜,只是實(shí)現(xiàn)簡單的轉(zhuǎn)換嘹履,如果需求更多的朋友可以加入更多的轉(zhuǎn)換功能,如下代碼:
package com.enterprise.cqbc.utility;
/**
Android尺寸單位轉(zhuǎn)換工具類 *
@Description: Android尺寸單位轉(zhuǎn)換工具類 *
@File: DisplayUtility.java *
@Package com.enterprise.cqbc.utility *
@Author Hanyonglu *
@Date 2012-03-24 下午05:03:07 *
@Version V1.0
*/
public class DisplayUtility {
/** * 將px值轉(zhuǎn)換為dip或dp值债热,保證尺寸大小不變
@param pxValue
@param scale(DisplayMetrics類中屬性density)
@return
*/
public static int pxTodip(float pxValue, float scale) {
return (int) (pxValue / scale + 0.5f);
}
/**
將dip或dp值轉(zhuǎn)換為px值砾嫉,保證尺寸大小不變
@param dipValue *
@param scale(DisplayMetrics類中屬性density)
@return
*/
public static int dipTopx(float dipValue, float scale) {
return (int) (dipValue * scale + 0.5f);
}
/**
將px值轉(zhuǎn)換為sp值,保證文字大小不變
@param pxValue *
@param fontScale(DisplayMetrics類中屬性scaledDensity)
@return
*/
public static int pxTosp(float pxValue, float fontScale) {
return (int) (pxValue / fontScale + 0.5f);
}
/**
將sp值轉(zhuǎn)換為px值窒篱,保證文字大小不變 *
@param spValue *
@param fontScale(DisplayMetrics類中屬性scaledDensity) *
@return
*/
public static int spTopx(float spValue, float fontScale) {
return (int) (spValue * fontScale + 0.5f);
}
}
5.簡單的Drawable圖形:
Drawable圖形存儲在 /res/drawable/drawables.xml
中焰枢,其格式如下:
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<drawable name="red_rect">#F00</drawable>
</resources>
要在代碼中使用應(yīng)按如下格式:
ColorDrawable myDraw = (ColorDrawable)getResources().getDrawable(R.drawable.red_rect);
6.圖像:
圖像也是經(jīng)常用到的一類資源,其格式有如下幾種:
-
使用9格拉伸圖像
由于手機(jī)屏幕擁有各種不同的分辨率舌剂,如果能夠根據(jù)不同的屏幕尺寸和方向或者不同長度的調(diào)整圖像大小济锄,那么采用9格拉伸圖像將是非常方便的,而且它是一種被拉伸而不失真的圖像格式霍转。使用步驟如下:
A荐绝、運(yùn)行 Android SDK Tools --adraw9patch.bat文件”芟
B低滩、將一個png文件拖入左側(cè)的面板中⊙遗纾
C恕沫、選中左側(cè)底部的Show patches【斑點(diǎn)】∩匆猓
D婶溯、將Patch scale設(shè)置為合適的值(比能夠看見標(biāo)記結(jié)果值稍大)⊥得梗
E迄委、沿著圖像的右邊沿單擊,以設(shè)置水平“格”引導(dǎo)类少⌒鹕恚
F、沿著圖像的上邊沿單擊硫狞,以設(shè)置垂直“格”引導(dǎo)信轿。
G残吩、在右側(cè)面板中查看結(jié)果财忽,移動“格”導(dǎo)引知道圖像按照預(yù)期的結(jié)果進(jìn)行拉伸∈榔剩
H定罢、要刪除一個“格”導(dǎo)引,按住“Shift”鍵在導(dǎo)引的像素(黑色)上點(diǎn)擊即可旁瘫∽尜欤
I琼蚯、命名為.9.png保存圖像。 -
下面是打開adraw9patch.bat工具的例圖:
關(guān)于9格拉伸圖像的詳細(xì)信息這里不再詳述惠况,有興趣的朋友查閱相關(guān)文檔遭庶。
在我們的程序中使用圖像的方式因不同情況而采取不同的方法。
如果將flag.png圖像存放在/res/drawable
目錄中稠屠,我們在使用時只需要通過R.drawable.flag
即可峦睡;
也可以直接訪問BitmapDrawable對象
,如下代碼:
BitmapDrawable bitmapFlag = (BitmapDrawable)getResources().getDrawable(R.drawable.icon);
int iBitmapHeightInPixels = bitmapFlag.getIntrinsicHeight();
int iBitmapWidthInPixels = bitmapFlag.getIntrinsicWidth();
如果是使用9格拉伸圖像权埠,則就不能使用上面的代碼榨了,需要將BitmapDrawable
改為NinePatchDrawable
對象,即:
NinePatchDrawable bitmapFlag = (NinePatchDrawable)getResources().getDrawable(R.drawable.icon);
7.動畫:
在Android中攘蔽,動畫由四種類型組成龙屉,如下圖所示:
動畫是存儲在/res/anim/目錄中,它可以使用XML文件來定義满俗,也可以將其寫的JAVA代碼中转捕,其XML代碼格式如下:
<?xml version="1.0" encoding="UTF-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<rotate
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fromDegrees="300"
android:toDegrees="-360"
android:pivotX="10%"
android:pivotY="100%"
android:duration="10000" />
</set>
Animation主要有兩種動畫模式:
- 一種是tweened animation(漸變動畫)
-
另一種是frame by frame(畫面轉(zhuǎn)換動畫) ,用XML和JAVA表示分別如下所示:
下面依次說明下在xml文件中含義唆垃。
alpha
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<alphaandroid:fromAlpha="0.1"android:toAlpha="1.0"android:duration="3000"/>
<!--
透明度控制動畫效果 alpha
浮點(diǎn)型值:
fromAlpha 屬性為動畫起始時透明度
toAlpha 屬性為動畫結(jié)束時透明度
說明:
0.0表示完全透明
1.0表示完全不透明
以上值取0.0-1.0之間的float數(shù)據(jù)類型的數(shù)字
長整型值:
duration 屬性為動畫持續(xù)時間
說明:
時間以毫秒為單位-->
</set>
scale
~~~xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<scale
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fromXScale="0.0"
android:toXScale="1.4"
android:fromYScale="0.0"
android:toYScale="1.4"
android:pivotX="50%"
android:pivotY="50%"
android:fillAfter="false"
android:duration="700" />
</set>
<!--
尺寸伸縮動畫效果
scale 屬性:interpolator 指定一個動畫的插入器 在我試驗過程中五芝,
使用android.res.anim中的資源時候發(fā)現(xiàn) 有三種動畫插入器:
accelerate_decelerate_interpolator 加速-減速 動畫插入器
accelerate_interpolator 加速-動畫插入器
decelerate_interpolator 減速- 動畫插入器 其他的屬于特定的動畫效果
浮點(diǎn)型值:
fromXScale 屬性為動畫起始時 X坐標(biāo)上的伸縮尺寸
toXScale 屬性為動畫結(jié)束時 X坐標(biāo)上的伸縮尺寸
fromYScale 屬性為動畫起始時Y坐標(biāo)上的伸縮尺寸
toYScale 屬性為動畫結(jié)束時Y坐標(biāo)上的伸縮尺寸
說明: 以上四種屬性值
0.0表示收縮到?jīng)]有
1.0表示正常無伸縮 值小于
1.0表示收縮
值大于1.0表示放大
pivotX
屬性為動畫相對于物件的X坐標(biāo)的開始位置
pivotY
屬性為動畫相對于物件的Y坐標(biāo)的開始位置
說明: 以上兩個屬性值 從0%-100%中取值 50%為物件的X或Y方向坐標(biāo)上的中點(diǎn)位置
長整型值:
duration 屬性為動畫持續(xù)時間 說明: 時間以毫秒為單位
布爾型值:
fillAfter 屬性 當(dāng)設(shè)置為true ,該動畫轉(zhuǎn)化在動畫結(jié)束后被應(yīng)用
-->
translate
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translateandroid:fromXDelta="30"
android:toXDelta="-80"
android:fromYDelta="30"
android:toYDelta="300"
android:duration="2000"/>
<!-- translate 位置轉(zhuǎn)移動畫效果
整型值:
fromXDelta 屬性為動畫起始時 X坐標(biāo)上的位置
toXDelta 屬性為動畫結(jié)束時 X坐標(biāo)上的位置
fromYDelta 屬性為動畫起始時 Y坐標(biāo)上的位置
toYDelta 屬性為動畫結(jié)束時 Y坐標(biāo)上的位置
注意: 沒有指定fromXType toXType fromYType toYType 時候辕万, 默認(rèn)是以自己為相對參照物
長整型值:
duration 屬性為動畫持續(xù)時間 說明: 時間以毫秒為單位-->
</set>
rotate
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<rotate
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fromDegrees="0"
android:toDegrees="+350"
android:pivotX="50%"
android:pivotY="50%"
android:duration="3000" />
<!-- rotate 旋轉(zhuǎn)動畫效果
屬性:
interpolator
指定一個動畫的插入器 在我試驗過程中枢步,使用android.res.anim中的資源時候發(fā)現(xiàn)有三種動畫插入器:
accelerate_decelerate_interpolator 加速-減速 動畫插入器
accelerate_interpolator 加速-動畫插入器
decelerate_interpolator 減速- 動畫插入器 其他的屬于特定的動畫效果
浮點(diǎn)數(shù)型值:
fromDegrees 屬性為動畫起始時物件的角度
toDegrees 屬性為動畫結(jié)束時物件旋轉(zhuǎn)的角度 可以大于360度
說明:
當(dāng)角度為負(fù)數(shù)——表示逆時針旋轉(zhuǎn) 當(dāng)角度為正數(shù)——表示順時針旋轉(zhuǎn) (負(fù)數(shù)from——to正數(shù):順時針旋轉(zhuǎn)) (負(fù)數(shù)from——to負(fù)數(shù):逆時針旋轉(zhuǎn)) (正數(shù)from——to正數(shù):順時針旋轉(zhuǎn)) (正數(shù)from——to負(fù)數(shù):逆時針旋轉(zhuǎn))
pivotX 屬性為動畫相對于物件的X坐標(biāo)的開始位置
pivotY 屬性為動畫相對于物件的Y坐標(biāo)的開始位置
說明:
以上兩個屬性值 從0%-100%中取值 50%為物件的X或Y方向坐標(biāo)上的中點(diǎn)位置
長整型值:
duration 屬性為動畫持續(xù)時間
說明: 時間以毫秒為單位-->
</set>
若要在程序中使用動畫效果,需按以下方式引用蓄坏,如下代碼所示:
/** *
加載動畫效果 *
@param context 程序的上下文 *
@param id 動畫XML文件的引用 *
@return
*/
public static Animation loadAnimation(Context context, int id){
Animation myAnimation = AnimationUtils.loadAnimation(this,R.anim.push_left);
}
關(guān)于動畫效果剛才講過价捧,除了可以在XML文件中設(shè)置以外,還可以在JAVA代碼中編寫涡戳,如下例所示:
//在代碼中定義動畫實(shí)例對象
private Animation myAnimation_Alpha;
private Animation myAnimation_Scale;
private Animation myAnimation_Translate;
private Animation myAnimation_Rotate;
//根據(jù)各自的構(gòu)造方法來初始化一個實(shí)例對象
myAnimation_Alpha=new AlphaAnimation(0.1f, 1.0f);
myAnimation_Scale =new ScaleAnimation(
0.0f, 1.4f, 0.0f, 1.4f,
Animation.RELATIVE_TO_SELF,
0.5f,
Animation.RELATIVE_TO_SELF,
0.5f);
myAnimation_Translate=new TranslateAnimation(30.0f, -80.0f, 30.0f, 300.0f);
myAnimation_Rotate=new RotateAnimation(
0.0f, +350.0f,
Animation.RELATIVE_TO_SELF,
0.5f,
Animation.RELATIVE_TO_SELF,
0.5f
);
下面我再來給大家分別介紹下在JAVA中代碼的含義,方便我們在以后使用脯倚。關(guān)于各個對象的定義我就沒必要在這里介紹了渔彰,只介紹它們的構(gòu)造函數(shù)參數(shù)定義和設(shè)置動畫持續(xù)的時間。
AlphaAnimation類對象構(gòu)造如下:
AlphaAnimation(float fromAlpha, float toAlpha)
//第一個參數(shù)fromAlpha為 動畫開始時候透明度
//第二個參數(shù)toAlpha為 動畫結(jié)束時候透明度
myAnimation_Alpha=new AlphaAnimation(0.1f, 1.0f);
//說明:
// 0.0表示完全透明
// 1.0表示完全不透明
設(shè)置動畫持續(xù)時間:
myAnimation_Alpha.setDuration(5000);
//設(shè)置時間持續(xù)時間為 5000毫秒
ScaleAnimation類對象構(gòu)造如下:
ScaleAnimation(float fromX,
float toX, float fromY,
float toY, int pivotXType,
float pivotXValue,
int pivotYType,
float pivotYValue
)
//第一個參數(shù)fromX為動畫起始時 X坐標(biāo)上的伸縮尺寸
//第二個參數(shù)toX為動畫結(jié)束時 X坐標(biāo)上的伸縮尺寸
//第三個參數(shù)fromY為動畫起始時Y坐標(biāo)上的伸縮尺寸
//第四個參數(shù)toY為動畫結(jié)束時Y坐標(biāo)上的伸縮尺寸
/*說明: 以上四種屬性值
0.0表示收縮到?jīng)]有
1.0表示正常無伸縮
值小于1.0表示收縮
值大于1.0表示放大
*/
//第五個參數(shù)pivotXType為動畫在X軸相對于物件位置類型
//第六個參數(shù)pivotXValue為動畫相對于物件的X坐標(biāo)的開始位置
//第七個參數(shù)pivotXType為動畫在Y軸相對于物件位置類型
//第八個參數(shù)pivotYValue為動畫相對于物件的Y坐標(biāo)的開始位置
myAnimation_Scale =new ScaleAnimation(
0.0f,
1.4f,
0.0f,
1.4f,
Animation.RELATIVE_TO_SELF,
0.5f,
Animation.RELATIVE_TO_SELF,
0.5f
);
設(shè)置動畫持續(xù)時間:
myAnimation_Scale.setDuration(700);
//設(shè)置時間持續(xù)時間為 700毫秒
TranslateAnimation類對象構(gòu)造如下:
TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)
//第一個參數(shù)fromXDelta為動畫起始時 X坐標(biāo)上的移動位置
//第二個參數(shù)toXDelta為動畫結(jié)束時 X坐標(biāo)上的移動位置
//第三個參數(shù)fromYDelta為動畫起始時Y坐標(biāo)上的移動位置
//第四個參數(shù)toYDelta為動畫結(jié)束時Y坐標(biāo)上的移動位置
設(shè)置動畫持續(xù)時間:
myAnimation_Translate.setDuration(2000);
//設(shè)置時間持續(xù)時間為 2000毫秒
RotateAnimation類對象構(gòu)造如下:
RotateAnimation(
float fromDegrees,
float toDegrees,
int pivotXType,
float pivotXValue,
int pivotYType,
float pivotYValue
)
//第一個參數(shù)fromDegrees為動畫起始時的旋轉(zhuǎn)角度
//第二個參數(shù)toDegrees為動畫旋轉(zhuǎn)到的角度
//第三個參數(shù)pivotXType為動畫在X軸相對于物件位置類型
//第四個參數(shù)pivotXValue為動畫相對于物件的X坐標(biāo)的開始位置
//第五個參數(shù)pivotXType為動畫在Y軸相對于物件位置類型
//第六個參數(shù)pivotYValue為動畫相對于物件的Y坐標(biāo)的開始位置
myAnimation_Rotate=new RotateAnimation(
0.0f,
+350.0f,
Animation.RELATIVE_TO_SELF,
0.5f,
Animation.RELATIVE_TO_SELF,
0.5f
);
設(shè)置動畫持續(xù)時間:
myAnimation_Rotate.setDuration(3000);
//設(shè)置時間持續(xù)時間為 3000毫秒
8. 菜單文件:
Android中的菜單和動畫一樣推正,即可在XML中定義恍涂,也可寫在我們的程序中,下面主要是介紹在XML中定義植榕,關(guān)于在程序中的使用大家可以查閱相關(guān)文檔再沧,不再詳述。
菜單存儲在/res/menu
目錄下尊残,以下是其代碼格式:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_main_offline"
android:icon="@android:drawable/ic_menu_always_landscape_portrait"
android:title="@string/menu_main_offline" />
<item android:id="@+id/menu_main_fav"
android:icon="@drawable/ic_menu_star"
android:title="@string/menu_main_fav" />
<item android:id="@+id/menu_main_config"
android:icon="@android:drawable/ic_menu_preferences"
android:title="@string/menu_main_config" />
<item android:id="@+id/menu_main_about"
android:icon="@android:drawable/ic_menu_info_details"
android:title="@string/menu_main_about" />
</menu>
<!--
<menu>
根元素沒有屬性炒瘸,它包含<item>和<group>子元素淤堵。
<group>表示一個菜單組,相同的菜單組可以一起設(shè)置其屬性顷扩,
例如visible拐邪、enabled和checkable等。
<group>元素的屬性說明如下隘截。
id:唯一標(biāo)示該菜單組的引用id扎阶。
menuCategory:對菜單進(jìn)行分類,定義菜單的優(yōu)先級婶芭,
有效值為container东臀、system、secondary和alternative犀农。
orderInCategory:一個分類排序整數(shù)惰赋。
checkableBehavior:選擇行為,單選井赌、多選還是其他谤逼。有效值為none、all和single仇穗。
visible:是否可見流部,true或者false。
enabled:是否可用纹坐,true或者false枝冀。
<item>表示菜單項,包含在<menu>或<group>中的有效屬性耘子。
<item>元素的屬性說明如下果漾。
id:唯一標(biāo)示菜單的ID引用。
menuCategory:菜單分類谷誓。
orderInCategory:分類排序绒障。
title:菜單標(biāo)題字符串。
titleCondensed:濃縮標(biāo)題捍歪,適合標(biāo)題太長的時候使用户辱。
icon:菜單的圖標(biāo)。
alphabeticShortcut:字符快捷鍵糙臼。
numericShortcut:數(shù)字快捷鍵庐镐。
checkable:是否可選。
checked:是否已經(jīng)被選变逃。
visible:是否可見必逆。
enabled:是否可用。
-->
在代碼中使用該菜單文件如下方式所示:
package com.code.test;
import android.app.Activity;import android.os.Bundle;
import android.view.Menu;import android.view.MenuInflater;
/ *
Android使用菜單文件示例 *
@Description: Android使用菜單文件示例 *
@File: Activity2.java *
@Package com.code.test *
@Author Hanyonglu *
@Date 2012-03-24 下午05:49:33 *
@Version V1.0 */
public class MenuActivity extends Activity{
private MenuInflater menuInfalter = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// 實(shí)例化MenuInflater對象
menuInfalter = new MenuInflater(this);
}
/ * 創(chuàng)建菜單 */
public boolean onCreateOptionsMenu(Menu menu) {
// 調(diào)用MenuInflater的inflate方法,通過配置文件創(chuàng)建菜單 名眉。
menuInfalter.inflate(R.menu.help_menu, menu);
return true;
}
}
9. XML文件:
XML文件存儲在/res/xml
目錄中粟矿,這個目錄中大家可能偶爾用到過,這里可以用來存儲xml格式的文件璧针,并且和其他資源文件一樣嚷炉,這里的資源是會被編譯成二進(jìn)制格式放到最終的安裝包里的,我們也可以通過R類來訪問這里的文件探橱,并且解析里面的內(nèi)容申屹。
例如我們在這里存放了一個名為books.xml的文件:
<?xml version="1.0" encoding="utf-8"?>
<book>
<title>Android應(yīng)用開發(fā)</title>
<title>IPhone游戲開發(fā)</title>
</book>
隨后,我們就可以通過資源ID來訪問并解析這個文件了隧膏,有關(guān)XML的解析在這里不再詳述哗讥,請訪問我的另一篇文章:
http://www.cnblogs.com/hanyonglu/archive/2012/02/28/2370675.html 。
需要大家要注意的是胞枕,這里的xml文件杆煞,最終是會被編譯成二進(jìn)制形式的,如果大家想讓文件原樣存儲的話腐泻,那么就要用到下一個講解的資源了决乎,那就是/res/raw
目錄,它可以存儲原始文件派桩。
10. 原始文件:
如剛才所講构诚,可以將原始文件存儲在/res/raw
目錄中,這個目錄的唯一區(qū)別就是铆惑,這里的文件會原封不動的存儲到設(shè)備上范嘱,不會被編譯為二進(jìn)制形式,訪問的方式也是通過R類员魏,下面是代碼示例:
public void setRawResource(){
((TextView)findViewById(R.id.txRaw)).setText(readStream(getResources()
.openRawResource(R.raw.rawtext)));
}
private String readStream(InputStream is) {
try {
ByteArrayOutputStream bo = new ByteArrayOutputStream();
int i = is.read();
while(i != -1) {
bo.write(i); i = is.read();
}
return bo.toString();
} catch (IOException e) {
return "";
}
}
這次使用資源類中的方法丑蛤,openRawResource
返回給我們一個輸入流,這樣我們就可以任意讀取文件中的內(nèi)容了撕阎,例如上面例子中那樣受裹,原樣輸出文本文件中的內(nèi)容。當(dāng)然我們也可以直接讀取raw目錄下文件數(shù)據(jù)虏束,如下代碼所示:
/ * 讀取raw文件夾下文件數(shù)據(jù) *
@param fileName *
@return */
public String getFromRaw(String fileName){
String res = "";
try{
InputStream in = getResources().openRawResource(R.raw.test1);
int length = in.available();
byte [] buffer = new byte[length];
in.read(buffer);
res = EncodingUtils.getString(buffer, "UTF-8");
in.close();
}
catch(Exception e){
e.printStackTrace();
}
return res ;
}
當(dāng)然名斟,如果我們需要更高的自由度,盡量不受android平臺的約束魄眉,那么/assets
這個目錄就是我們的首選了。
這個目錄中的文件除了不會被編譯成二進(jìn)制形式之外闷袒,另外一點(diǎn)就是坑律,訪問方式是通過文件名,而不是資源ID。**并且還有更重要的一點(diǎn)就是晃择,大家可以在這里任意的建立子目錄冀值,而/res
目錄中的資源文件是不能自行建立子目錄的。
**如果需要這種靈活的資源存儲方式宫屠,那么就看看下面這個例子:
AssetManager assets = getAssets();
((TextView)findViewById(R.id.txAssets)).setText(readStream(assets.open("data.txt")));
在context上下文中列疗,調(diào)用getAssets返回一個AssetManager,然后使用open方法就可以訪問需要的資源了浪蹂,這里open方法是以assets目錄為根的抵栈。所以上面這段代碼訪問的是assets目錄中名為data.txt的資源文件。readStream方法在上面提到過坤次,不再詳說古劲。如果要直接獲取asset目錄下文件并讀取數(shù)據(jù),也可按這樣編寫:
/** *
獲取asset目錄下文件并讀取數(shù)據(jù) *
@param fileName *
@return
*/
public String getFromAsset(String fileName){
String res="";
try{
InputStream in = getResources().getAssets().open(fileName);
int length = in.available();
byte [] buffer = new byte[length];
in.read(buffer);
res = EncodingUtils.getString(buffer, "UTF-8");
}catch(Exception e){
e.printStackTrace();
}
return res;
}
如果需要獲取assets文件夾下的所有文件缰猴,可通過如下方法:
/** * 獲取asset目錄所有文件 */
public void getAllAssetFiles(){
try {
String[] files = getAssets().list("");
for(String f : files){
System.out.println(f);
}
} catch (Exception e) {
// TODO: handle exception
}
}
關(guān)于Android獲取assets的文件路徑有如下方法:
第一種方法:
String path = "file:///android_asset/文件名";
第二種方法:
InputStream abpath = getClass().getResourceAsStream("/assets/文件名");
若要想要轉(zhuǎn)換成String類型产艾,則使用下列代碼:
String path = new String(InputStreamToByte(is));
private byte[] InputStreamToByte(InputStream is) throws IOException {
ByteArrayOutputStream bytestream = new ByteArrayOutputStream();
int ch;
while ((ch = is.read()) != -1) {
bytestream.write(ch);
}
byte imgdata[] = bytestream.toByteArray();
bytestream.close(); return imgdata;
}
11. 布局文件:
布局文件就不再詳細(xì)講了,因為我們對這個實(shí)在是太熟悉了滑绒。
12.樣式和主題:
Android中的Style 和 Theme(樣式和主題)和Web開發(fā)中的CSS樣式差不多闷堡,它主要是存儲在res/values/
目錄下,文件名為styles.xml
疑故。下面是官方對Style說明:
Style:是一個包含一種或者多種格式化屬性的集合杠览,我們可以將其用為一個單位用在布局XML單個元素當(dāng)中。比如焰扳,我們可以定義一種風(fēng)格來定義文本的字號大小和顏色倦零,然后將其用在View元素的一個特定的實(shí)例。
例如下面是自定義一個Style的示例:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- TextView標(biāo)題樣式 -->
<style name="textview_style_title">
<item name="android:textSize">18dp</item>
<item name="android:textColor">#888888</item>
</style>
</resources>
然后我們就可以將其應(yīng)用在TextView中吨悍,如下:
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textColor="#00FF00"
android:typeface="monospace"
android:text="@string/hello"
style="@style/textview_style_title" />
在上面的示例中扫茅,我們設(shè)置了TextView的字體大小和字體顏色。除了自定義style以外育瓜,我們還可以直接使用Android平臺中給我們提供的style或是在自己定義的style中繼承Android中的style葫隙,下面是在我們自已的style中繼承Android中的style,如下代碼:
<style name="GreenText" parent="@android:style/TextAppearance">
<item name="android:textColor">#00FF00</item>
</style>
下面是關(guān)于Theme的說明躏仇。
Theme:是一個包含一種或者多種格式化屬性的集合恋脚,我們可以將其為一個單位用在應(yīng)用中所有的Activity當(dāng)中或者應(yīng)用中的某個Activity當(dāng) 中。
比如焰手,我們可以定義一個Theme糟描,它為window frame和panel的前景和背景定義了一組顏色,并為菜單定義可文字的大小和顏色屬性书妻,可以將這個Theme應(yīng)用在你程序當(dāng)中所有的Activity里船响。以下是定義一個Theme的示例:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="CustomTheme" parent="android:Theme.Light">
<item name="android:windowBackground">@color/custom_theme_color</item>
<item name="android:colorBackground">@color/custom_theme_color</item>
</style>
</resources>
在程序中使用Theme時,可在配置文件中通過以下方式:
<activity android:theme="@style/CustomTheme">
Theme在程序的使用如下:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(R.style.NewTheme);
setContentView(R.layout.main);
}
注意,Theme是應(yīng)用在Activity上的資源见间×拇常
以上就是關(guān)于Android中的資源文件的存儲和使用,在使用過程中注意不同的資源的使用方式米诉。如果需要查看更多更詳細(xì)的資源文件存儲菱蔬,請查閱Android官方文檔,這里不再詳述史侣。
轉(zhuǎn)載地址:http://www.cnblogs.com/hanyonglu/archive/2012/03/27/2419533.html