標籤:
style是一些屬性值得集合,這些屬性值用來指定一個view 或者 window 的外觀和格式。style可以只指定height,padding,font color,font size,background color,和很多其他屬性。style 定義在xml資源檔中,與layout xml 檔案獨立開的。android中的style與web中的css有相似的設計哲學-允許設計樣式和內容的分離。
例如,使用style,你可以將這樣的 layout XML:
<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" />
所有與樣式相關的屬性都從layout XML 中移除了,放入了一個叫CodeFont的style中了,這個style被控制項的樣式屬性中引用了。你可以在接下來的部分看到這個style。
theme 是被整個 activity 或者app,而不是單個view(就像上面的例子)引用的style。當一個style被用作theme時,所有style指定的屬性並且被activity或者app中的每個view所支援的屬性,將會被引用。例如,你可以應用像CodeFont這樣的style作為theme到一個Activity中,然後Activity中所有的文字都會變成green monospace字型。
定義 Style
你只需要將XML檔案儲存在項目的res/values/目錄下,就可以建立style。XML檔案的名字是任意指定的,但是檔案的拓展名必須是.xml 並且必須被儲存在res/values/檔案夾下。
在檔案中添加<style>元素,所有的style中的name屬性是style的唯一的標識(這個屬性是必須的)。接著為每個style的所指定的屬性添加一個<item>元素,元素的name用來聲明你想定義的style屬性,同時給出屬性的值(值是必須的)。item的值可以是一個有特殊含義的字串,一個十六進位的顏色值,其他資源類型的引用,或者style屬性相關的值。下面是單個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>
在編譯時間,<resources>的所有子項目都被轉換為一個app的資來源物件,可以使用在<style>元素定義的name值引用這個對象。例子裡面的style能夠在一個XML布局檔案裡面用 @style/CodeFont來引用(樣本在上面的介紹中)。
<style>元素的parent屬性是可選的,用來指定繼承自其它資源ID中的樣式。如果需要你也可以在<style>中覆蓋繼承來的樣式。
注意,在Activity或者app中使用的style和為view定義的style在XML檔案中的定義是完全一樣的。例如上面例子中的style可以定義單個View的樣式或者在Activity和app中用作theme。我們將在後面討論如何使用style來定義單個style的樣式或者用作app的theme。
(翻譯整理自https://developer.android.com/intl/zh-cn/guide/topics/ui/themes.html#DefiningStyles)
android api 指南-Styles and Themes