本文介紹在Android開發中關於資源文件的存儲操作。對於Android資源也是非常重要的,主要包括文本字符串(strings)、顏色(colors)、數組(arrays)、動畫(anim)、布局(layout)、圖像和圖標(drawable)、音頻視頻(media)和其他應用程序使用的組件。
在Android開發中,資源文件是我們使用頻率最高的,無論是string,drawable,還是layout,這些資源都是我們經常使用到的,而且為我們的開發提供了很多方便,不過我們平時接觸的資源目錄一般都是下面這三個:
當然了,Android資源文件還有其他類型,如下圖所示:
這些資源都需要通過相應的資源類來進行管理。 下面請看管理這些資源的相關類:
int getColor(int id) //對應res/values/colors.xml Drawable getDrawable(int id) //對應res/drawable/ XmlResourceParser getLayout(int id) //對應res/layout/ String getString(int id) 和CharSequence getText(int id) //對應res/values/strings.xml InputStream openRawResource(int id) //對應res/raw/ void parseBundleExtra (String tagName, AttributeSet attrs, Bundle outBundle) //對應res/xml/ String[] getStringArray(int id) //對應res/values/arrays.xml float getDimension(int id) //對應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.字符串數組:
字符串數組存儲在/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>
獲取字符數組內容需要通過如下方式:
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>
顏色值是一個整數,只需要通過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標簽name屬性的名字);
另外,需要注意的是:尺寸不同的單位代表的值不一樣,具體看下圖:
官方推薦我們使用dp和sp進行表示,當然因情況而已,也可使用其他的尺寸。下同是一個簡單的尺寸轉換類,只是實現簡單的轉換,如果需求更多的朋友可以加入更多的轉換功能,如下代碼:
package com.enterprise.cqbc.utility; /** * Android尺寸單位轉換工具類 * @Description: Android尺寸單位轉換工具類 * @File: DisplayUtility.java * @Package com.enterprise.cqbc.utility * @Author Hanyonglu * @Date 2012-03-24 下午05:03:07 * @Version V1.0 */ public class DisplayUtility { /** * 將px值轉換為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值轉換為px值,保證尺寸大小不變 * @param dipValue * @param scale(DisplayMetrics類中屬性density) * @return */ public static int dipTopx(float dipValue, float scale) { return (int) (dipValue * scale + 0.5f); } /** * 將px值轉換為sp值,保證文字大小不變 * @param pxValue * @param fontScale(DisplayMetrics類中屬性scaledDensity) * @return */ public static int pxTosp(float pxValue, float fontScale) { return (int) (pxValue / fontScale + 0.5f); } /** * 將sp值轉換為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>
要在代碼中使用應按如下格式:
ColorDrawable myDraw = (ColorDrawable)getResources().getDrawable(R.drawable.red_rect);
6.圖像:
圖像也是經常用到的一類資源,其格式有如下幾種:
(1) 使用9格拉伸圖像
由於手機屏幕擁有各種不同的分辨率,如果能夠根據不同的屏幕尺寸和方向或者不同長度的調整圖像大小,那么采用9格拉伸圖像將是非常方便的,而且它是一種被拉伸而不失真的圖像格式。
使用步驟如下:
A、運行 Android SDK Tools --adraw9patch.bat文件。
B、將一個png文件拖入左側的面板中。
C、選中左側底部的Show patches【斑點】。
D、將Patch scale設置為合適的值(比能夠看見標記結果值稍大)。
E、沿着圖像的右邊沿單擊,以設置水平“格”引導。
F、沿着圖像的上邊沿單擊,以設置垂直“格”引導。
G、在右側面板中查看結果,移動“格”導引知道圖像按照預期的結果進行拉伸。
H、要刪除一個“格”導引,按住“Shift”鍵在導引的像素(黑色)上點擊即可。
I、命名為.9.png保存圖像。
(2) 下面是打開adraw9patch.bat工具的例圖:
關於9格拉伸圖像的詳細信息這里不再詳述,有興趣的朋友查閱相關文檔。
(3) 在我們的程序中使用圖像的方式因不同情況而采取不同的方法。如果將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(畫面轉換動畫) ,用XML和JAVA表示分別如下所示:
下面依次說明下在xml文件中含義。
<alpha>
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <alpha android:fromAlpha="0.1" android:toAlpha="1.0" android:duration="3000" /> <!-- 透明度控制動畫效果 alpha 浮點型值: fromAlpha 屬性為動畫起始時透明度 toAlpha 屬性為動畫結束時透明度 說明: 0.0表示完全透明 1.0表示完全不透明 以上值取0.0-1.0之間的float數據類型的數字 長整型值: duration 屬性為動畫持續時間 說明: 時間以毫秒為單位 --> </set>
<scale>
<?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中的資源時候發現 有三種動畫插入器: accelerate_decelerate_interpolator 加速-減速 動畫插入器 accelerate_interpolator 加速-動畫插入器 decelerate_interpolator 減速- 動畫插入器 其他的屬於特定的動畫效果 浮點型值: fromXScale 屬性為動畫起始時 X坐標上的伸縮尺寸 toXScale 屬性為動畫結束時 X坐標上的伸縮尺寸 fromYScale 屬性為動畫起始時Y坐標上的伸縮尺寸 toYScale 屬性為動畫結束時Y坐標上的伸縮尺寸 說明: 以上四種屬性值 0.0表示收縮到沒有 1.0表示正常無伸縮 值小於1.0表示收縮 值大於1.0表示放大 pivotX 屬性為動畫相對於物件的X坐標的開始位置 pivotY 屬性為動畫相對於物件的Y坐標的開始位置 說明: 以上兩個屬性值 從0%-100%中取值 50%為物件的X或Y方向坐標上的中點位置 長整型值: duration 屬性為動畫持續時間 說明: 時間以毫秒為單位 布爾型值: fillAfter 屬性 當設置為true ,該動畫轉化在動畫結束后被應用 -->
<translate>
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:fromXDelta="30" android:toXDelta="-80" android:fromYDelta="30" android:toYDelta="300" android:duration="2000" /> <!-- translate 位置轉移動畫效果 整型值: fromXDelta 屬性為動畫起始時 X坐標上的位置 toXDelta 屬性為動畫結束時 X坐標上的位置 fromYDelta 屬性為動畫起始時 Y坐標上的位置 toYDelta 屬性為動畫結束時 Y坐標上的位置 注意: 沒有指定fromXType toXType fromYType toYType 時候, 默認是以自己為相對參照物 長整型值: duration 屬性為動畫持續時間 說明: 時間以毫秒為單位 --> </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 旋轉動畫效果 屬性:interpolator 指定一個動畫的插入器 在我試驗過程中,使用android.res.anim中的資源時候發現 有三種動畫插入器: accelerate_decelerate_interpolator 加速-減速 動畫插入器 accelerate_interpolator 加速-動畫插入器 decelerate_interpolator 減速- 動畫插入器 其他的屬於特定的動畫效果 浮點數型值: fromDegrees 屬性為動畫起始時物件的角度 toDegrees 屬性為動畫結束時物件旋轉的角度 可以大於360度 說明: 當角度為負數——表示逆時針旋轉 當角度為正數——表示順時針旋轉 (負數from——to正數:順時針旋轉) (負數from——to負數:逆時針旋轉) (正數from——to正數:順時針旋轉) (正數from——to負數:逆時針旋轉) pivotX 屬性為動畫相對於物件的X坐標的開始位置 pivotY 屬性為動畫相對於物件的Y坐標的開始位置 說明: 以上兩個屬性值 從0%-100%中取值 50%為物件的X或Y方向坐標上的中點位置 長整型值: duration 屬性為動畫持續時間 說明: 時間以毫秒為單位 --> </set>
若要在程序中使用動畫效果,需按以下方式引用,如下代碼所示:
/** * 加載動畫效果 * @param context 程序的上下文 * @param id 動畫XML文件的引用 * @return */ public static Animation loadAnimation(Context context, int id){ Animation myAnimation= AnimationUtils.loadAnimation(this,R.anim.push_left); }
關於動畫效果剛才講過,除了可以在XML文件中設置以外,還可以在JAVA代碼中編寫,如下例所示:
//在代碼中定義動畫實例對象 private Animation myAnimation_Alpha; private Animation myAnimation_Scale; private Animation myAnimation_Translate; private Animation myAnimation_Rotate; //根據各自的構造方法來初始化一個實例對象 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中代碼的含義,方便我們在以后使用。關於各個對象的定義我就沒必要在這里介紹了,只介紹它們的構造函數參數定義和設置動畫持續的時間。
AlphaAnimation類對象構造如下:
AlphaAnimation(float fromAlpha, float toAlpha) //第一個參數fromAlpha為 動畫開始時候透明度 //第二個參數toAlpha為 動畫結束時候透明度 myAnimation_Alpha=new AlphaAnimation(0.1f, 1.0f); //說明: // 0.0表示完全透明 // 1.0表示完全不透明
設置動畫持續時間:
myAnimation_Alpha.setDuration(5000); //設置時間持續時間為 5000毫秒
ScaleAnimation類對象構造如下:
ScaleAnimation(float fromX, float toX, float fromY, float toY, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue) //第一個參數fromX為動畫起始時 X坐標上的伸縮尺寸 //第二個參數toX為動畫結束時 X坐標上的伸縮尺寸 //第三個參數fromY為動畫起始時Y坐標上的伸縮尺寸 //第四個參數toY為動畫結束時Y坐標上的伸縮尺寸 /*說明: 以上四種屬性值 0.0表示收縮到沒有 1.0表示正常無伸縮 值小於1.0表示收縮 值大於1.0表示放大 */ //第五個參數pivotXType為動畫在X軸相對於物件位置類型 //第六個參數pivotXValue為動畫相對於物件的X坐標的開始位置 //第七個參數pivotXType為動畫在Y軸相對於物件位置類型 //第八個參數pivotYValue為動畫相對於物件的Y坐標的開始位置 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_Scale.setDuration(700); //設置時間持續時間為 700毫秒
TranslateAnimation類對象構造如下:
TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta) //第一個參數fromXDelta為動畫起始時 X坐標上的移動位置 //第二個參數toXDelta為動畫結束時 X坐標上的移動位置 //第三個參數fromYDelta為動畫起始時Y坐標上的移動位置 //第四個參數toYDelta為動畫結束時Y坐標上的移動位置
設置動畫持續時間:
myAnimation_Translate.setDuration(2000); //設置時間持續時間為 2000毫秒
RotateAnimation類對象構造如下:
RotateAnimation(float fromDegrees, float toDegrees, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue) //第一個參數fromDegrees為動畫起始時的旋轉角度 //第二個參數toDegrees為動畫旋轉到的角度 //第三個參數pivotXType為動畫在X軸相對於物件位置類型 //第四個參數pivotXValue為動畫相對於物件的X坐標的開始位置 //第五個參數pivotXType為動畫在Y軸相對於物件位置類型 //第六個參數pivotYValue為動畫相對於物件的Y坐標的開始位置 myAnimation_Rotate=new RotateAnimation(0.0f, +350.0f, Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF, 0.5f);
設置動畫持續時間:
myAnimation_Rotate.setDuration(3000); //設置時間持續時間為 3000毫秒
8. 菜單文件:
Android中的菜單和動畫一樣,即可在XML中定義,也可寫在我們的程序中,下面主要是介紹在XML中定義,關於在程序中的使用大家可以查閱相關文檔,不再詳述。
菜單存儲在/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>表示一個菜單組,相同的菜單組可以一起設置其屬性,例如visible、enabled和checkable等。 <group>元素的屬性說明如下。 id:唯一標示該菜單組的引用id。 menuCategory:對菜單進行分類,定義菜單的優先級,有效值為container、system、secondary和alternative。 orderInCategory:一個分類排序整數。 checkableBehavior:選擇行為,單選、多選還是其他。有效值為none、all和single。 visible:是否可見,true或者false。 enabled:是否可用,true或者false。 <item>表示菜單項,包含在<menu>或<group>中的有效屬性。 <item>元素的屬性說明如下。 id:唯一標示菜單的ID引用。 menuCategory:菜單分類。 orderInCategory:分類排序。 title:菜單標題字符串。 titleCondensed:濃縮標題,適合標題太長的時候使用。 icon:菜單的圖標。 alphabeticShortcut:字符快捷鍵。 numericShortcut:數字快捷鍵。 checkable:是否可選。 checked:是否已經被選。 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); // 實例化MenuInflater對象 menuInfalter = new MenuInflater(this); } /** * 創建菜單 */ public boolean onCreateOptionsMenu(Menu menu) { // 調用MenuInflater的inflate方法,通過配置文件創建菜單 。 menuInfalter.inflate(R.menu.help_menu, menu); return true; } }
9. XML文件:
XML文件存儲在/res/xml目錄中,這個目錄中大家可能偶爾用到過,這里可以用來存儲xml格式的文件,並且和其他資源文件一樣,這里的資源是會被編譯成二進制格式放到最終的安裝包里的,我們也可以通過R類來訪問這里的文件,並且解析里面的內容。
例如我們在這里存放了一個名為books.xml的文件:
<?xml version="1.0" encoding="utf-8"?> <book> <title>Android應用開發</title> <title>IPhone游戲開發</title> </book>
隨后,我們就可以通過資源ID來訪問並解析這個文件了,有關XML的解析在這里不再詳述,請訪問我的另一篇文章:http://www.cnblogs.com/hanyonglu/archive/2012/02/28/2370675.html 。
需要大家要注意的是,這里的xml文件,最終是會被編譯成二進制形式的,如果大家想讓文件原樣存儲的話,那么就要用到下一個講解的資源了,那就是/res/raw目錄,它可以存儲原始文件。
10. 原始文件:
如剛才所講,可以將原始文件存儲在/res/raw目錄中,這個目錄的唯一區別就是,這里的文件會原封不動的存儲到設備上,不會被編譯為二進制形式,訪問的方式也是通過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,返回給我們一個輸入流,這樣我們就可以任意讀取文件中的內容了,例如上面例子中那樣,原樣輸出文本文件中的內容。當然我們也可以直接讀取raw目錄下文件數據,如下代碼所示:
/** * 讀取raw文件夾下文件數據 * @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 ; }
當然,如果我們需要更高的自由度,盡量不受android平台的約束,那么/assets這個目錄就是我們的首選了。
這個目錄中的文件除了不會被編譯成二進制形式之外,另外一點就是,訪問方式是通過文件名,而不是資源ID。並且還有更重要的一點就是,大家可以在這里任意的建立子目錄,而/res目錄中的資源文件是不能自行建立子目錄的。如果需要這種靈活的資源存儲方式,那么就看看下面這個例子:
AssetManager assets = getAssets(); ((TextView)findViewById(R.id.txAssets)).setText(readStream(assets.open("data.txt")));
在context上下文中,調用getAssets返回一個AssetManager,然后使用open方法就可以訪問需要的資源了,這里open方法是以assets目錄為根的。所以上面這段代碼訪問的是assets目錄中名為data.txt的資源文件。readStream方法在上面提到過,不再詳說。如果要直接獲取asset目錄下文件並讀取數據,也可按這樣編寫:
/** * 獲取asset目錄下文件並讀取數據 * @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 } }
關於Android獲取assets的文件路徑有如下方法:
第一種方法:
String path = "file:///android_asset/文件名";
第二種方法:
InputStream abpath = getClass().getResourceAsStream("/assets/文件名");
若要想要轉換成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. 布局文件:
布局文件就不再詳細講了,因為我們對這個實在是太熟悉了。
12.樣式和主題:
Android中的Style 和 Theme(樣式和主題)和Web開發中的CSS樣式差不多,它主要是存儲在res/values/目錄下,文件名為styles.xml。下面是官方對Style說明:
Style:是一個包含一種或者多種格式化屬性的集合,我們可以將其用為一個單位用在布局XML單個元素當中。比如,我們可以定義一種風格來定義文本的字號大小和顏色,然后將其用在View元素的一個特定的實例。
例如下面是自定義一個Style的示例:
<?xml version="1.0" encoding="utf-8"?> <resources> <!-- TextView標題樣式 --> <style name="textview_style_title"> <item name="android:textSize">18dp</item> <item name="android:textColor">#888888</item> </style> </resources>
然后我們就可以將其應用在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" />
在上面的示例中,我們設置了TextView的字體大小和字體顏色。除了自定義style以外,我們還可以直接使用Android平台中給我們提供的style或是在自己定義的style中繼承Android中的style,下面是在我們自已的style中繼承Android中的style,如下代碼:
<style name="GreenText" parent="@android:style/TextAppearance"> <item name="android:textColor">#00FF00</item> </style>
下面是關於Theme的說明。
Theme:是一個包含一種或者多種格式化屬性的集合,我們可以將其為一個單位用在應用中所有的Activity當中或者應用中的某個Activity當 中。比如,我們可以定義一個Theme,它為window frame和panel 的前景和背景定義了一組顏色,並為菜單定義可文字的大小和顏色屬性,可以將這個Theme應用在你程序當中所有的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是應用在Activity上的資源。
以上就是關於Android中的資源文件的存儲和使用,在使用過程中注意不同的資源的使用方式。如果需要查看更多更詳細的資源文件存儲,請查閱Android官方文檔,這里不再詳述。
轉載地址:http://www.cnblogs.com/hanyonglu/archive/2012/03/27/2419533.html