Android樣式和主題
如果已經熟悉在網頁設計中的層疊樣式表(CSS),了解Android樣式也是非常相似。每個 Android 窗口小部件,可以設置更改應用程序外觀風格相關的屬性。樣式可以指定屬性,如高度,填充,字體顏色,字體大小,背景顏色以及其它。
可以指定這些屬性在布局文件如下:
<?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>
不過這樣一來,我們需要定義的樣式屬性,每個屬性分彆用於源代碼維護的角度來看這是非常不好的。因此,樣式定義應該放在單獨的文件,如下解釋。
定義樣式
樣式可以定義在一個單獨的XML指定布局的XML資源文件。此XML文件位於 res/values/ 項目目錄,強製性的樣式文件中<resources>作為根節點,XML文件名稱是任意,但它必須使用.xml擴展名。
可以定義每個文件中使用的多種樣式<style>標簽,但要使用唯一的名稱來標識此樣式。 Android 樣式屬性設置使用的<item>標簽,如下圖所示:
<?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>裡邊的值可以是一個關鍵字串,十六進製的顏色,參考到另一個資源類型,或其他的值取決於樣式屬性。
使用樣式
樣式定義之後,就可以用它在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>
要理解這個概念涉及到Android 的樣式,可以檢查 樣式實例。
樣式繼承
Android支持級聯樣式表在網頁設計風格非常類似繼承這種方式。可以使用這個繼承現有的樣式屬性,然後定義想要更改或添加屬性。
其操作簡單,創建一個新的的樣式繼承LargeFont上述CustomFontStyle風格定義,但字體的大小變大,可以編寫這樣的新的樣式:
<?xml version="1.0" encoding="utf-8"?> <resources> <style name="CustomFontStyle.LargeFont"> <item name="android:textSize">20ps</item> </style> </resources>
@style/CustomFontStyle.LargeFont 的XML布局文件,可以參考這個新的樣式。可以繼續秉承這樣多次,隻要願意,周期通過鏈接名稱。例如,可以擴展FontStyle.LargeFont的是紅色的,如下:
<?xml version="1.0" encoding="utf-8"?> <resources> <style name="CustomFontStyle.LargeFont.Red"> <item name="android:textColor">#FF0000</item>/> </style> </resources>
繼承這種技術通過鏈接在一起的名字僅適用於自己的資源定義的樣式。不能繼承:Android內置樣式的這種方式。要引用一個Android內置風格,如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>
Android 主題
希望能夠理解樣式的概念,現在讓我們去了解什麼是主題。主題是什麼,主題隻不過是要Android應用到整個活動或應用程序中統一樣式,而不是一個單獨的視圖樣式。
因此,當一個樣式應用為主題,將適用於每一個活動或應用程序視圖它支持每個樣式屬性。例如,可以應用一個主題Activity 活動的的同一CustomFontStyle風格,然後內部的所有文本,活動都會有綠色環保等寬字體。
要設置應用程序的所有活動的主題,打開AndroidManifest.xml文件,編輯<application>標簽包含了android:theme 屬性的風格名稱。例如:
<application android:theme="@style/CustomFontStyle">
但是,如果想有一個主題,隻是在應用程序的一個Activity 活動,然後添加android:theme屬性到<activity>標簽。例如:
<activity android:theme="@style/CustomFontStyle">
有一些由Android定義的默認主題,可以直接使用或繼承父屬性如下:
<style name="CustomTheme" parent="android:Theme.Light"> ... </style>
要理解這個概念,有關Android的主題,可以查看 主題示例。
默認樣式和主題
Android平台提供了一個大集合,可以在應用程序中使用的風格和主題。可以在R.style類的參考找到所有可用的樣式。要使用這裡列出的風格,在一個樣式名替換所有下劃線。例如,可以應用Theme_NoTitleBar主題使用如“@android:style/Theme.NoTitleBar”。可以看到下麵的源代碼為Android的風格和主題: