Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android系統Styles and Themes

Android系統Styles and Themes

編輯:關於Android編程

本文簡要介紹andorid Styles和Themes相關內容。

樣式和主題

樣式是一指定視圖或窗口的外觀和格式的屬性集合。樣式可以指定屬性,如高度,填充,字體顏色,字體大小,背景顏色,以及更多。樣式被定義在一個單獨的XML指定布局的XML資源。

Android中的樣式和網頁設計中的級聯樣式表有著相同的設計理念—他們允許你將內容和設計分開。

例如:通過使用樣式,你可以使用這樣的樣式布局:

將他們修改成:

 

所有和樣式相關的屬性被從該布局文件中移除,而被放入一個叫做CodeFont的樣式定義文件中,這樣就可使應用相同的樣式屬性。

 

主題是一中應用到整個Acitvity或應用程序的風格,而不是一個單獨的視圖(在上面的例子)。當樣式作為一種主題應用,那麼在每一個activity和應用程序的中的視圖如果支持對應的樣式,都會生效。例如,你可以將同樣的CodeFont應用在一個Acitvity中,然後該Acitvity內部的所有文本,都會顯示成綠色等寬字體。

定義樣式

要創建一組樣式,那麼要在你的項目中的res/valuses/目錄下創建一個xml。 XML文件的名稱是任意的,但必須使用.xml擴展名並保存在res/values/文件夾。

XML文件的根節點必須是的

對於每一個你要創建的樣式,添加一個

每一個的子元素都會在編譯時轉換成對應的應用資源對象。這些屬性可以通過

如果你想繼承你自己定義的樣式,那麼你沒有必要使用parent屬性,而僅僅需要把你自己的定義的屬性名字作為新定義的屬性名字的前綴,並用“。”分開,例如,

注意到上面這個例子中在style標簽中沒有對應的parent屬性,但是由於名字屬性是一個CodeFont 的樣式名(這是一個你自己定義的樣式)為前綴,這個樣式繼承了CodeFont的所有定義的屬性,並且這個屬性重寫了android:textColor屬性,讓字體顏色成為紅色,你可以使用@style/CodeFont.Red.來調用這個新的樣式。

你可以通過“.”來實現多次繼承,例如,你可以繼承CodeFont.Red

來實現bigger:

這個樣式同時繼承了CodeFont和CodeFont。Red,並且添加了android:textSize屬性

 

注意:通過“.”來把樣式繼承起來,僅僅當這些樣式是你自己定義的才能生效,而不能通過這種方式繼承android本身自帶的樣式,例如Textappearance,要繼承這類樣式,你必須使用parent屬性

樣式屬性

現在既然了解了如何定義一個樣式,那麼就需要學習在定義樣式時那些屬性——用元素定義的屬性——是可用的。你可能對其中的一些已經很熟悉了,例如layout_width和textColor。當然,還有很多的屬性可以使用。

 

相應的參考類中列舉了該類支持的所有xml屬性,這裡是找對應視圖顯示屬性的最好的地方。例如,在TextView XML表列舉的屬性都能在TextView元素(或者它的子類)定義時使用。在列表中的一個引用android:inputType,因此,你應該把該屬性放在元素中,如下所示:

同樣,你也可以為EditText元素創建一個樣式,來包含這個元素:

因此,對應的XML的布局文件中就可使用該樣式,如下所示

這樣做看起來多此一舉,但是當多個樣式屬性和因子被重復應用在多個地方,這樣做的收獲將是巨大的。

 

可以查看R.ttr.文件,來獲取所有可用的樣式屬性,但是必須銘記,不是所有的視圖對象都會接受所有相似的屬性,所以,一般情況下,你得查看對應視圖類來獲取某個特定類支持的樣式屬性。但是,如果對一個視圖應用了它不支持的樣式屬性,那麼只有那些它支持的才會生效,而忽略那些不支持的屬性。

 

然而,還有一些屬性不被任何視圖支持,而僅僅只能被應用到主題當中,這些樣式屬性,將會在整個窗口中生效而不是任何的視圖中,例如,那些可以隱藏應用題目,隱藏狀態欄,或者改變窗口背景。這類樣式屬性不屬於任何視圖對象,要了解這了樣式屬性,可以查看R.arrt中那些以window開頭的屬性,例如, windowTitle和windowBackground這兩個屬性就是當一個樣式被作為一個主題應用在activity或者應用時才能生效的。下一個部分將介紹有關如何應用一個樣式和主題。

 

注意:不要忘了在每一個元素中以android:名空間開頭的屬性名字,,例如:.

如何使用樣式和主題

 

有兩種方式設置一個樣式:

> 對一個一個單獨的視圖,通過在布局文件的視圖屬性中增加style屬性

> 對於一個Activity或者應用,通過在android的manifest中的或者元素中添加android:theme屬性。

 

當你在布局文件中針對某一個視圖使用樣式,那麼那些在樣式中定義的屬性,將會在這個視圖中生效。如果樣式被應用在一組視圖中,那麼子視圖是不會繼承這些樣式屬性的—也就是說只有被這些樣式直接修飾的屬性才能生效。但是有一種方法可以使一個樣式對所有視圖都生效,那就是把這些樣式作為一個主題使用。

 

要把一個樣式定義作為一個主題使用,那麼就要用這個樣式來修飾android manifest中的activity和application元素。如果你這樣做,那麼該activity或者應用中的每一個視圖都會生效自己支持的屬性。例如,如果你把CodeFont樣式使用在一個Activity上,那麼在這個應用中的所有文字的樣式都會生效這種樣式。其他的那些不支持的樣式屬性將直接被忽略。一個視圖只會生效那些它自己支持的屬性。

對視圖使用樣式

下面是一個在xml布局文件中使用樣式的例子:

現在,這個TextView將會顯示成上面CodeFont定義的那種樣式。

 

注意:這個樣式屬性沒有使用android:前綴屬性

 

對activity和application使用樣式

對一個application的所有Acitvity使用主題,那麼就要在androidManifext.xml中的application標簽中包含android:theme屬性,例如:

如果你只是想正對某一個activity使用樣式,那麼你只需要在對應的標簽中添加android:theme屬性

 

正如android提供了一些原生的資源一樣,android同樣也提供了一些預制的主題供用戶使用,從而避免用戶定義,例如,你可以使用dailog主題,來使你的activity看起來像一個dailog框,例如

或者你想是你的應用的背景是透明的,那麼你可以使用透明主題

如果你想使用主題,但是又想修改,那麼只需要在主題中加入parent屬性,例如:你可以修改原生的light主題,從而使它使用自己定義的顏色:

 

#b0b0ff

(注意這個color必須提供一個特定的資源,因為android:background屬性僅僅支持將其他資源的引用作為值,而不像android:colorBackground,不能將一個16進制的顏色值賦給它)

 

現在可以在androd manifest中使用CustomTheme來替代Theme,Light.

如何根據一個平台版本選擇一個主題

新的android平台已經提供針對application的主題,你也許想在這些平台上使用它,但同時,也希望他能支持那些老版本。你可以通過一個根據平台版本來實現資源切換的自主定義主題來實現。

 

例如,下面是一個用戶自主定義的主題,這個主題是一個標准的默認light主題,這個主題將調用一個res/values/目錄下的xml文件(一般是res/values/styles.xml):

為了使該應用程序運行在android 3.0(api level 11)或者更高版本上時使用holographic主題,你可以在res/values-v11目錄下放置可選的主題,但是確保該主題繼承於holographic主題



 

現在你可以像使用其他樣式一樣使用這個主題,並且當運行平台是android 3.0或者更高時,它會自動切換到holographic主題上。

 

所有可以在theme中使用的標准屬性都包含在R.styleable.Theme中。

 

Android平台提供了大量的可選的樣式和主題,來滿足用戶在自己的應用程序上使用。你可以在R.style類中找到所有可以使用的樣式的引用。要使用這些樣式,你只需要用“.”來替換名字中的下劃線,例如,你可以像這樣使用Theme_NoTitleBar主題:"@android:style/Theme.NoTitleBar".

使用平台相關的樣式和主題

然而,R.style 並不是一份好的文檔,同時也沒有對樣式進行詳細的描述,因此,查看樣式和主題對應的源代碼將會使我們對android提供的每一個樣式屬性有一個深入的理解,更加詳細的android樣式和主題,可以查看如下源代碼:

 

/frameworks/base/core/res/res/values/ styles.xml

/frameworks/base/core/res/res/values/ themes.xml

後記

該文檔資料僅供參考,如有不足之處,請指正.


  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved