1 style
1.1 什么是 style?
官方文檔是這樣定義style的:
A style resource defines the format and look for a UI. A style can be applied to an individual View (from within a layout file) or to an entire Activity or application (from within the manifest file).
style是作用于單個view的,而theme是作用于整個Activity或者application。
1.2 文件位置
res/values/filename.xml
1.3 資源引用
In XML:@[package:]style/style_name
1.4 語法
<?xml version="1.0" encoding="utf-8"?>
//根標(biāo)簽
<resources>
//定義一個包含item的style
<style
name="style_name" parent="@[package:]style/style_to_inherit">
//定義一個style的屬性
<item
name="[package:]style_property_name">style_value
</item>
</style>
</resources>
<resources>元素的每個子項都會在編譯時轉(zhuǎn)換成一個應(yīng)用資源對象,該對象可由<style>元素的name屬性中的值引用。
<style>元素中的parent屬性是可選屬性,它指定應(yīng)作為此樣式所繼承屬性來源的另一樣式的資源ID。如果愿意,您可在隨后替換這些繼承的樣式屬性。
1.5 示例
定義style的XML文件(保存在res/values里):
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="CustomText" parent="@style/Text">
<item name="android:textSize">20sp</item>
<item name="android:textColor">#008</item>
</style>
</resources>
style作用于TextView的XML文件(保存在res/layout):
<?xml version="1.0" encoding="utf-8"?>
<EditText
//上述定義的style: CustomText
style="@style/CustomText"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Hello, World!" />
1.6 繼承
有兩種方式可以繼承:
- 通過
parent - 通過點(.)
現(xiàn)在我們定義一個style,繼承Android平臺的默認文本外觀,然后對其進行修改:
<style name="GreenText" parent="@android:style/TextAppearance">
<item name="android:textColor">#00FF00</item>
</style>
可以通過<style>元素中的parent屬性指定應(yīng)作為您的樣式所繼承屬性來源的樣式。您可以利用它來繼承現(xiàn)有樣式的屬性,然后只定義您想要更改或添加的屬性。 您可以從自行創(chuàng)建的樣式或平臺內(nèi)建的樣式繼承屬性。
如果您想從自行定義的樣式繼承屬性,則不必使用parent屬性, 而是只需將您想繼承的樣式的名稱以前綴形式添加到新樣式的名稱之中,并以句點進行分隔。
例如:要創(chuàng)建一個繼承上文定義的GreenText樣式的新樣式,但將顏色設(shè)置為紅色。
<style name="GreenText.Red">
<item name="android:textColor">#FF0000</item>
</style>
請注意<style>標(biāo)記中沒有 parent 屬性,但由于name屬性以GreenText樣式名稱(這是您創(chuàng)建的一個樣式)開頭,因此這個樣式會繼承該樣式的所有樣式屬性。 這個樣式隨后會替換android:textColor屬性,將文本設(shè)置為紅色。 您可以@style/GreenText.Red形式引用這個新樣式。
您可以通過使用句點鏈接名稱繼續(xù)進行這樣的繼承,次數(shù)不限。
注意:這種通過將名稱鏈接起來的繼承方法只適用于由您自己的資源定義的樣式。 您無法通過這種方法繼承
Android內(nèi)建樣式。 要引用內(nèi)建樣式(例如TextAppearance),您必須使用parent屬性。注意:當(dāng)使用
parent指定父style之后,則前綴方式不再起作用。只是單純的作為style當(dāng)名字。(可自行驗證)
2 theme
2.1 什么是 theme?
theme是作用于整個activity或者Application的style。本質(zhì)上也是style。
2.2 用法
和style本質(zhì)上是一樣的,只是作用域不一樣。
我這里只是簡單講解了一下,網(wǎng)上有很多優(yōu)秀的文章,專門講解如何使用,我這里就不詳細展開了。