樣式是用于描述一個View或是一個窗口的顯示屬性的集合,樣式可以指定如高度,填充,字體顏色,字體大小,背景顏色等屬性。樣式是從布局文件中分離出來的一個XML資源文件。Android中的樣式就像Web開發中的css樣式表,它使用我們的樣式獨立于內容進行設計開發。
例如,通過使用一個樣式可以讓如下的布局文件
<TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:textColor="#00FF00" android:typeface="monospace" android:text="@string/hello" />
簡化為:
<TextView style="@style/CodeFont" android:text="@string/hello" />
所有和樣式有關的屬性都被從布局XML文件中移動到一個叫“CodeFont”的樣式定義中,然后使用一個style屬性指定樣式名稱。你將會在以下的內容中看到如何定義一個樣式。
應用于一個Activity或應用程序的樣式稱為主題(theme),而不是剛才說的一個View。所有在當前Activity或應用下的視圖(VIEW)都會應用相同的主題樣式。例如,您可以讓一個Activity使用”CodeFont”主題,那么這個Activity下的所有視圖的的文本都將是綠色等寬字體。
定義樣式
定義樣式我們需要在 res/values/目錄下新建一個XML文件,文件名自已隨便命名,但必須以.xml為文件后綴。Xml的根節點必須為
我們用style標簽來定義一個樣式,用
<?xml version="1.0" encoding="utf-8"?> <resources> <style name="CodeFont" parent="@android:style/TextAppearance.Medium"> <item name="android:layout_width">fill_parent</item> <item name="android:layout_height">wrap_content</item> <item name="android:textColor">#00FF00</item> <item name="android:typeface">monospace</item> </style> </resources>
Style標簽的name屬性是必須有的,
樣式的繼承
這里有兩種方式可以實現樣式繼承,如上例中所示的,我們可以在定義樣式時使用parent屬性來繼承樣式,使用這種方式,我們可以繼承一個我們自己定義好的樣式,也可以繼承一個android平臺自帶的樣式(后文中會介紹android平臺自帶的所有樣式)。如下所示,我們繼承一個android平臺默認的文本樣式,并把它的字體顏色改為我們需要的顏色。
<style name="GreenText" parent="@android:style/TextAppearance"> <item name="android:textColor">#00FF00</item> </style>
另一種繼承的方式是使用用戶自定義的樣式作為前綴即可。這種方式只適用于繼承用戶自定義樣式。如下所示:
<style name="CodeFont.Red"> <item name="android:textColor">#FF0000</item> </style>
這樣,新定義的樣式就會繼承CodeFont樣式的所有屬性,然后把字體顏色變為#FF0000。我們可以這樣引用新的樣式: @style/CodeFont.Red
相同的方法,我們可以再繼承下去,如下所示:
<style name="CodeFont.Red.Big"> <item name="android:textSize">30sp</item> </style>
這樣新的樣式文子的大小就和CodeFont.Red樣式不同了。
樣式屬性
到這里為止,你已經知道了如何定義一個樣式,你還需要知道有多少種樣式屬性可以通過
最好的方法查詢一個視圖支持哪些樣式屬性的方法是查詢視圖類的文檔中XML Attributes表格,如TextView的XML attributes如鏈接中所示: http://www.ideasandroid.com/android/sdk/docs/reference/android/widget/TextView.html#lattrs
如需所有可用的樣式屬性的,請參閱R.attr: http://www.ideasandroid.com/android/sdk/docs/reference/android/R.attr.html
不是所有的視圖都支持上面的樣式屬性,如果遇到不支持的樣式屬性,您定義的屬性將會被忽略。
應用樣式和主題
應用樣式和主題的方法很簡單,在布局定義文件(layout)中,使用style屬性直接引用樣式資源,如下所示:
<TextView style="@style/CodeFont" android:text="@string/hello" />
在AndroidManifest.xml文件中可以引用樣式主題,可以為一個Activity定義一個主題,也可以為整個應用程序定義一個主題,如下所示:
<application android:theme="@style/CustomTheme">
或者:
<activity android:theme="@style/CustomDialogTheme">
Android平臺的樣式和主題
樣式見:http://www.ideasandroid.com/android/sdk/styles.xml
主題見:http://www.ideasandroid.com/android/sdk/themes.xml