如果已經(jīng)熟悉在網(wǎng)頁設(shè)計(jì)中的層疊樣式表(CSS),了解Android樣式也是非常相似。每個(gè) Android 窗口小部件,可以設(shè)置更改應(yīng)用程序外觀風(fēng)格相關(guān)的屬性。樣式可以指定屬性,如高度,填充,字體顏色,字體大小,背景顏色以及其它。
可以指定這些屬性在布局文件如下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/text_id" android:layout_width="wrap_content" android:layout_height="wrap_content" android:capitalize="characters" android:textColor="#00FF00" android:typeface="monospace" android:text="@string/hello_world" /> </LinearLayout>
不過這樣一來,我們需要定義的樣式屬性,每個(gè)屬性分別用于源代碼維護(hù)的角度來看這是非常不好的。因此,樣式定義應(yīng)該放在單獨(dú)的文件,如下解釋。
樣式可以定義在一個(gè)單獨(dú)的XML指定布局的XML資源文件。此XML文件位于 res/values/ 項(xiàng)目目錄,強(qiáng)制性的樣式文件中<resources>作為根節(jié)點(diǎn),XML文件名稱是任意,但它必須使用.xml擴(kuò)展名。
可以定義每個(gè)文件中使用的多種樣式<style>標(biāo)簽,但要使用唯一的名稱來標(biāo)識(shí)此樣式。 Android 樣式屬性設(shè)置使用的<item>標(biāo)簽,如下圖所示:
<?xml version="1.0" encoding="utf-8"?> <resources> <style name="CustomFontStyle"> <item name="android:layout_width">fill_parent</item> <item name="android:layout_height">wrap_content</item> <item name="android:capitalize">characters</item> <item name="android:typeface">monospace</item> <item name="android:textSize">12pt</item> <item name="android:textColor">#00FF00</item>/> </style> </resources>
這里<item>里邊的值可以是一個(gè)關(guān)鍵字串,十六進(jìn)制的顏色,參考到另一個(gè)資源類型,或其他的值取決于樣式屬性。
樣式定義之后,就可以用它在XML布局文件使用樣式屬性,如下所示:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:id="@+id/text_id" style="@style/CustomFontStyle" android:text="@string/hello_world" /> </LinearLayout>
要理解這個(gè)概念涉及到Android 的樣式,可以檢查 樣式實(shí)例。
Android支持級(jí)聯(lián)樣式表在網(wǎng)頁設(shè)計(jì)風(fēng)格非常類似繼承這種方式。可以使用這個(gè)繼承現(xiàn)有的樣式屬性,然后定義想要更改或添加屬性。
其操作簡單,創(chuàng)建一個(gè)新的的樣式繼承LargeFont上述CustomFontStyle風(fēng)格定義,但字體的大小變大,可以編寫這樣的新的樣式:
<?xml version="1.0" encoding="utf-8"?> <resources> <style name="CustomFontStyle.LargeFont"> <item name="android:textSize">20ps</item> </style> </resources>
@style/CustomFontStyle.LargeFont 的XML布局文件,可以參考這個(gè)新的樣式。可以繼續(xù)秉承這樣多次,只要愿意,周期通過鏈接名稱。例如,可以擴(kuò)展FontStyle.LargeFont的是紅色的,如下:
<?xml version="1.0" encoding="utf-8"?> <resources> <style name="CustomFontStyle.LargeFont.Red"> <item name="android:textColor">#FF0000</item>/> </style> </resources>
繼承這種技術(shù)通過鏈接在一起的名字僅適用于自己的資源定義的樣式。不能繼承:Android內(nèi)置樣式的這種方式。要引用一個(gè)Android內(nèi)置風(fēng)格,如TextAppearance,必須使用父屬性,如下所示:
<?xml version="1.0" encoding="utf-8"?> <resources> <style name="CustomFontStyle" parent="@android:style/TextAppearance"> <item name="android:layout_width">fill_parent</item> <item name="android:layout_height">wrap_content</item> <item name="android:capitalize">characters</item> <item name="android:typeface">monospace</item> <item name="android:textSize">12pt</item> <item name="android:textColor">#00FF00</item>/> </style> </resources>
希望能夠理解樣式的概念,現(xiàn)在讓我們?nèi)チ私馐裁词侵黝}。主題是什么,主題只不過是要Android應(yīng)用到整個(gè)活動(dòng)或應(yīng)用程序中統(tǒng)一樣式,而不是一個(gè)單獨(dú)的視圖樣式。
因此,當(dāng)一個(gè)樣式應(yīng)用為主題,將適用于每一個(gè)活動(dòng)或應(yīng)用程序視圖它支持每個(gè)樣式屬性。例如,可以應(yīng)用一個(gè)主題Activity 活動(dòng)的的同一CustomFontStyle風(fēng)格,然后內(nèi)部的所有文本,活動(dòng)都會(huì)有綠色環(huán)保等寬字體。
要設(shè)置應(yīng)用程序的所有活動(dòng)的主題,打開AndroidManifest.xml文件,編輯<application>標(biāo)簽包含了android:theme 屬性的風(fēng)格名稱。例如:
<application android:theme="@style/CustomFontStyle">
但是,如果想有一個(gè)主題,只是在應(yīng)用程序的一個(gè)Activity 活動(dòng),然后添加android:theme屬性到<activity>標(biāo)簽。例如:
<activity android:theme="@style/CustomFontStyle">
有一些由Android定義的默認(rèn)主題,可以直接使用或繼承父屬性如下:
<style