Android:風格和主題

風格和主題(Styles and Themes)

      

       風格就是用來指定view或者window的外貌和格式的一系列的屬性的集合,包括高度,間隙,字體大小,顏色,背景顏色等。風格是通過XML資源定義,它跟知道layout的XML文件不同。

 

       Android 風格跟網頁設計一樣,允許將內容跟設計分離。

例如要設計下面這個TextView,XML layout 定義如下:

     <TextView

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:textColor="#00FF00"

    android:typeface="monospace"

    android:text="@string/hello" />

 

style 設計模式如下:

<TextView

        style="@style/CodeFont"

    android:text="@string/hello" />

 

所有跟風格相關的屬性都從XML layout移到了了一個叫做CodeFont的style中,具體定義後面會介紹。

 

主題也是一種風格,不過它是被應用到整個的活動或者應用中,而不是應用到一個單獨的view。當一個風格被應用爲一個主題時,這個活動或者應用中的所有view 都會採用它所支持的style的所有屬性。

 

定義一個風格

1.                  在APP的 /res/values/  目錄下面建立一個XML文件,文件名隨意取定,但是文件後綴名必須是.xml.例如style.xml

2.                   style.xml 文件的根節點必須是 <resources>

3.                   每個<style>元素對於一個風格,對於這個元素,它的name 屬性是用來識別它的唯一標誌

4.                   對於一個風格的每個屬性,都需要添加一個<item>元素,<item>元素包含一個屬性名和一個屬性值

 

例子如下:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <stylename="CodeFont"parent="@android:style/TextAppearance.Medium">
        <itemname="android:layout_width">fill_parent</item>
        <itemname="android:layout_height">wrap_content</item>
        <itemname="android:textColor">#00FF00</item>
        <itemname="android:typeface">monospace</item>
        </style>

</resources>

 

<resources>元素的每個子元素在編譯的時候就會轉換成一個應用資源對象,然後通過它的name的值就能引用它了。

<style>元素的parent 屬性是可選的。它通過資源ID指定了該style應該從其它style繼承得到的屬性,同時你也可以複寫這些屬性。

一個style,無論是用作主題還是風格,它們都是定義在XML文件中的。

 

繼承

<style>元素的繼承屬性允許你的style繼承來自其它style定義的屬性(包括自己另外定義的或者系統本省提供的)。然後你只需要添加一些額外的屬性即可。同時你也能複寫繼承得到的屬性來改變它本身的值。例如繼承自系統的style:

<style name="GreenText" parent="@android:style/TextAppearance">

        <item name="android:textColor">#00FF00</item>

</style>

 

如果你需要繼承你自己的style,不一定非要parent屬性。你只需要將你要繼承的style名字作爲新style的前綴,並用點隔開即可。例如繼承自CodeFont 的style Red定義如下:

<style name="CodeFont.Red">

        <item name="android:textColor">#FF0000</item>

  </style>

引用方法:@style/CodeFont.Red.

這種通過前綴名和.的繼承方式可以無限制的繼承下去,例如:

<style name="CodeFont.Red.Big">

        <item name="android:textSize">30sp</item>

 </style>

 

注意:這種繼承方式只能用於你自己定義的style.要想繼承系統的style,必須使用parent屬性。

 

風格的屬性

 

既然已經知道如何定義一個風格,那麼我們有必要了解下風格里面的<item>元素可以定義哪些屬性。

對於一個view而言,要定義它的<item>屬性,最好的辦法就是去這個view的參考類中去找,這個參考類會列出所有支持的XML屬性。這些屬性以及它父類的屬性都能夠被定義在style 中。

例子:

<EditText
    android:inputType="number"
    ... />

You can instead create a style for the EditText element that includes this property:

<stylename="Numbers">
  <itemname="android:inputType">number</item>
  ...
</style>

So your XML for the layout can now implement this style:

<EditText
    style="@style/Numbers"
    ... />

這種工作看上行去更復雜,實際上當你有大量的屬性要設置的時候,這種做法是很值得推薦的。

此外,在R.attr 中,你能夠找到所有的style 屬性。值得一提的是,如果你將一個style應用到一個view中,但是某些屬性這個view不支持,就會直接忽視,將支持的應用起來。

對於某些屬性不能被任何view支持,只能應用爲主題。這些屬性是應用到一個窗口的。而不是任何一個view.例如隱藏應用的標題,狀態欄,改變窗口的背景顏色等(更多請看:R.attr 中 window.開頭的屬性)。

注意:<item>的格式:<item name="android:inputType">.

將風格和主題應用到UI

在R.style 類中有大量的style供你使用。爲了更好的理解style.請參照這些style的源碼。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章