Android 上的樣式和主題可讓您區分應用程式設計的詳細資料與 UI 結構和行為,與網頁設計中的樣式表類似。
樣式是一組屬性,可指定單一項目的外觀
View
。樣式可指定屬性
例如字型顏色、字型大小、背景顏色等等
「主題」是套用至整個應用程式、活動或檢視畫面的一系列屬性 而不只是個別檢視區塊套用主題時,應用程式中的每個檢視畫面,或 活動會套用每個支援的主題屬性。主題也能將樣式套用到 非檢視畫面元素,例如狀態列和視窗背景。
樣式和主題會在
樣式資源檔案
res/values/
,通常命名為 styles.xml
。
![](https://developer.android.com/static/training/material/images/material-themes_2x.png?authuser=0000&hl=zh-tw)
圖 1. 套用至同一活動的兩個主題:
Theme.AppCompat
(左) 和 Theme.AppCompat.Light
(右)。
主題與樣式
主題和樣式有許多相似之處,但用途不同。主題和 樣式具有相同的基本結構,也就是將屬性對應到 資源。
「樣式」會指定特定檢視畫面類型的屬性。舉例來說,某個樣式可能 指定按鈕的屬性您在樣式中指定的每個屬性都是可於 版面配置檔案將所有屬性擷取為樣式,就能輕鬆使用及維護 並在多個小工具中同步處理不同裝置的資料
「主題」會定義具名資源的集合,可供樣式、版面配置、
小工具等。主題會將語意名稱 (例如 colorPrimary
) 指派給 Android
再複習一下,機構節點
是所有 Google Cloud Platform 資源的根節點
樣式和主題應相輔相成。例如,您可能有樣式指定了
每個按鈕都包含 colorPrimary
,而另一個部分則是
colorSecondary
。主題會提供這些色彩的實際定義。時間
裝置進入夜間模式,您的應用程式可以從「淺色」切換為「淺色」改成「深色」背景主題主題
變更所有資源名稱的值您不需要變更樣式,因為
樣式使用語意名稱,而非特定色彩定義。
如要進一步瞭解主題和樣式如何搭配運作,請參閱這篇網誌文章 Android 樣式:主題和樣式。
建立和套用樣式
如要建立新樣式,請開啟專案的 res/values/styles.xml
檔案。適用對象
請按照下列步驟操作:
- 新增
<style>
元素,並具備可唯一識別樣式的名稱。 - 為每個要定義的樣式屬性新增
<item>
元素。 每個項目中的name
都會指定您未在 版面配置。<item>
元素中的值是該屬性的值。
舉例來說,假設您定義了下列樣式:
<?xml version="1.0" encoding="utf-8"?> <resources> <style name="GreenText" parent="TextAppearance.AppCompat"> <item name="android:textColor">#00FF00</item> </style> </resources>
可依下列方式將樣式套用至檢視畫面:
<TextView style="@style/GreenText" ... />
只要檢視畫面接受,樣式中指定的每個屬性就會套用至該檢視畫面。檢視畫面 會忽略所有不接受的屬性。
然而,您通常 為整個應用程式、活動或集合套用樣式做為主題 查看。
擴充和自訂樣式
自行建立樣式時,請一律從架構或支援架構擴充現有樣式
程式庫,可讓您維持與平台 UI 樣式的相容性。如要擴充樣式,請指定
選擇要透過 parent
屬性擴充的樣式。之後,您就能覆寫
樣式屬性並添加新屬性
舉例來說,您可以沿用 Android 平台的預設文字外觀,並將 如下:
<style name="GreenText" parent="@android:style/TextAppearance"> <item name="android:textColor">#00FF00</item> </style>
不過,請一律沿用 Android 支援資料庫的核心應用程式樣式。「
支援資料庫會為可用的 UI 屬性進行最佳化,為每個樣式進行最佳化調整,藉此提供相容性
每個版本支援資料庫樣式的名稱通常與平台的樣式類似。
但包含 AppCompat
。
若要繼承程式庫或自有專案的樣式,請宣告父項樣式名稱
沒有上述範例所示的 @android:style/
部分。例如:
以下範例沿用支援資料庫的文字外觀樣式:
<style name="GreenText" parent="TextAppearance.AppCompat"> <item name="android:textColor">#00FF00</item> </style>
您也可以擴充樣式的
並帶有點標記法,而不是使用 parent
屬性。也就是在
加入樣式名稱以及要沿用的樣式名稱,並以半形句號分隔。個人中心
一般來說,只有在擴充自己的樣式時,才會進行這項操作,而不適用於其他程式庫的樣式。例如:
以下樣式會沿用上述範例中 GreenText
的所有樣式
然後將文字放大
<style name="GreenText.Large"> <item name="android:textSize">22dp</item> </style>
您可以鏈結更多 。
如要尋找可以使用 <item>
標記宣告的屬性,請參閱「XML」
屬性」表格。支援所有檢視畫面
基本 XML 屬性
View
類別,許多檢視畫面也會新增專屬的特殊屬性。舉例來說,
TextView
XML 屬性
加入
android:inputType
。
屬性,例如套用至接收輸入內容的文字檢視區塊,例如
「EditText
」小工具。
套用樣式做為主題
建立主題的方式與建立樣式的方式相同。差別在於如何套用:
而不是在檢視區塊中使用 style
屬性套用樣式,而是以
android:theme
標記上的 <application>
屬性或
AndroidManifest.xml
檔案中的 <activity>
標記。
以下舉例說明如何套用 Android 支援資料庫的 Material Design「dark」主題 整個應用程式:
<manifest ... > <application android:theme="@style/Theme.AppCompat" ... > </application> </manifest>
將「淺色」主題套用至單一活動的方法如下:
<manifest ... > <application ... > <activity android:theme="@style/Theme.AppCompat.Light" ... > </activity> </application> </manifest>
應用程式或活動中的每個檢視畫面,都會套用 套用該主題的所有屬性如果檢視畫面僅支援樣式中宣告的部分屬性,系統就會套用 並忽略不支援的屬性。
從 Android 5.0 (API 級別 21) 和 Android 支援資料庫 22.1 版開始,您也可以指定
將 android:theme
屬性套用至版面配置檔案中的檢視畫面。這麼做會修改
這個 View 和任何子項檢視畫面,這對於變更特定區域中的主題調色盤很有幫助
介面部分
先前的範例說明如何套用主題,例如 Theme.AppCompat
Android 支援資料庫提供的功能然而,您通常會希望自訂主題以符合
鎖定應用程式品牌來宣傳產品最佳做法是從支援資料庫擴充這些樣式
但會覆寫部分屬性,如下一節所述。
樣式階層
Android 提供多種在 Android 應用程式中設定屬性的方法。例如: 您可以直接在版面配置中設定屬性、將樣式套用至檢視畫面、為版面配置套用主題,以及 甚至透過程式輔助方式設定屬性
選擇如何設定應用程式的樣式時,請留意 Android 的樣式階層。一般來說,請使用 盡量保持主題和樣式如果您在 多個地點時,請參考以下清單來決定最終套用的屬性。清單是 由高優先順序排列
- 使用文字跨度將字元或段落層級樣式設定套用至
TextView
衍生 類別 - 透過程式輔助方式套用屬性。
- 直接將個別屬性套用至檢視區塊。
- 將樣式套用至檢視畫面。
- 預設樣式。
- 將主題套用至一組檢視畫面、活動或整個應用程式。
- 套用特定檢視畫面專屬的樣式,例如設定
TextAppearance
在TextView
。
![](https://developer.android.com/static/guide/topics/ui/images/text-multiple-styles.png?authuser=0000&hl=zh-tw)
圖 2. 來自 span
的樣式設定會覆寫來自 textAppearance
的樣式設定。
文字外觀
樣式的其中一項限制是,您只能將一個樣式套用至 View
。在
TextView
不過,您也可以指定
TextAppearance
屬性
運作方式與樣式類似,如以下範例所示:
<TextView ... android:textAppearance="@android:style/TextAppearance.Material.Headline" android:text="This text is styled via textAppearance!" />
TextAppearance
可讓您定義文字專屬樣式,同時保留
View
可用於其他用途。但請注意,如果您已定義任何文字屬性
直接在 View
或在樣式中,這些值會覆寫
TextAppearance
值。
TextAppearance
支援 TextView
的樣式屬性子集
優惠。如需完整的屬性清單,請參閱
TextAppearance
。
以下列舉幾個常見的 TextView
屬性:
lineHeight[Multiplier|Extra]
,
lines
,
breakStrategy
和
hyphenationFrequency
。
TextAppearance
適用於字元層級,而非段落層級,因此
系統不支援影響整個版面配置的屬性。
自訂預設主題
使用 Android Studio 建立專案時,應用程式會透過下列方式將質感設計主題套用至您的應用程式:
如專案的 styles.xml
檔案所定義。這個AppTheme
樣式
會擴充支援資料庫的主題,並包含所使用色彩屬性的覆寫值
例如應用程式列和
懸浮動作按鈕 (如有使用)。因此
就能藉由更新提供的色彩,快速自訂應用程式的顏色設計。
例如,styles.xml
檔案看起來會像這樣:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item> </style>
樣式值實際上是參照其他
顏色資源,定義於
專案的 res/values/colors.xml
檔案這是您編輯檔案以變更色彩。
詳情請參閱
Material Design 顏色總覽
透過動態色彩和其他自訂顏色改善使用者體驗。
確認色彩後,請更新 res/values/colors.xml
中的值:
<?xml version="1.0" encoding="utf-8"?> <resources> <!-- Color for the app bar and other primary UI elements. --> <color name="colorPrimary">#3F51B5</color> <!-- A darker variant of the primary color, used for the status bar (on Android 5.0+) and contextual app bars. --> <color name="colorPrimaryDark">#303F9F</color> <!-- a secondary color for controls like checkboxes and text fields. --> <color name="colorAccent">#FF4081</color> </resources>
接著,您可以覆寫需要的其他樣式。舉例來說,您可以變更活動 背景顏色,如下所示:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> ... <item name="android:windowBackground">@color/activityBackground</item> </style>
如要查看可在主題中使用的屬性清單,請參閱
R.styleable.Theme
。新增時
版面配置中的檢視畫面樣式,您也可以查看「XML 屬性」
資料表類別參照中的資料。舉例來說,所有檢視表都支援
基礎 View
中的 XML 屬性
類別。
大多數的屬性都適用於特定類型的檢視畫面,有些屬性則適用於所有檢視畫面。不過
文章中列出了幾個佈景主題屬性
「R.styleable.Theme
」都適用於
活動視窗,而非版面配置中的檢視畫面。舉例來說,windowBackground
會將
視窗背景和 windowEnterTransition
定義要用在
活動開始時詳情請參閱開始
使用動畫建立的活動
Android 支援資料庫也提供其他屬性,供您用來自訂主題
從 Theme.AppCompat
延伸,例如:colorPrimary
上述範例我們可以看到
程式庫的 attrs.xml
檔案。
支援資料庫也提供您您可能會想要擴充的各種主題
而不是上述範例中顯示的查看可用主題最好的地方是
這個
程式庫的 themes.xml
檔案。
新增版本專屬樣式
如果新版 Android 新增要使用的主題屬性,可以將這些屬性新增至主題。
仍能與舊版本相容只需一個 styles.xml
檔案即可
儲存在含有values
資源版本
限定詞:
res/values/styles.xml # themes for all versions res/values-v21/styles.xml # themes for API level 21+ only
由於 values/styles.xml
檔案中的樣式適用於所有版本,
values-v21/styles.xml
中的主題可沿用這些主題。換言之,我們不會
複製樣式時,從「底數」開始再依據版本需求擴充
。
例如,若要宣告 Android 5.0 (API 級別 21) 以上版本的視窗轉換,您需要
改用新屬性因此,res/values/styles.xml
的基本主題看起來會像這樣
:
<resources> <!-- Base set of styles that apply to all versions. --> <style name="BaseAppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="colorPrimary">@color/primaryColor</item> <item name="colorPrimaryDark">@color/primaryTextColor</item> <item name="colorAccent">@color/secondaryColor</item> </style> <!-- Declare the theme name that's actually applied in the manifest file. --> <style name="AppTheme" parent="BaseAppTheme" /> </resources>
然後在 res/values-v21/styles.xml
中新增版本專屬樣式,如下所示:
<resources> <!-- extend the base theme to add styles available only with API level 21+ --> <style name="AppTheme" parent="BaseAppTheme"> <item name="android:windowActivityTransitions">true</item> <item name="android:windowEnterTransition">@android:transition/slide_right</item> <item name="android:windowExitTransition">@android:transition/slide_left</item> </style> </resources>
您現在可以在資訊清單檔案中套用 AppTheme
,系統會選取樣式
各個系統版本提供的 CPU 版本
如要進一步瞭解如何為不同裝置使用額外資源,請參閱 提供額外資源。
自訂小工具樣式
架構和支援資料庫中的每個小工具都有預設樣式。舉例來說
設定應用程式樣式時,請使用支援資料庫提供的主題,
Button
會使用
Widget.AppCompat.Button
樣式。如要將其他小工具樣式套用到
按鈕,您可以利用版面配置檔案中的 style
屬性完成此操作。舉例來說,
以下會套用程式庫的無邊框按鈕樣式:
<Button style="@style/Widget.AppCompat.Button.Borderless" ... />
如果想將這個樣式套用到所有按鈕,可在主題的
buttonStyle
,如下所示:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="buttonStyle">@style/Widget.AppCompat.Button.Borderless</item> ... </style>
您也可以擴充小工具樣式,就像擴充其他任何樣式一樣。 然後在版面配置或主題中套用自訂小工具樣式。
其他資源
如要進一步瞭解主題和樣式,請參閱下列其他資源: