Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 風格style與主題theme(一)-style、theme的關系與使用

風格style與主題theme(一)-style、theme的關系與使用

編輯:關於Android編程

第1節 概述

主題theme與風格style是兩個很相近的概念,經常把它們混亂著稱呼。它們都定義在xml文件中,都使用

這好比一本書,書的一級標題要使用一號字體(字體要比別的字體大),二級標題要使用二號字體,以此類推。每一級標題使用的文字,就對應的一種style。以後在寫書的時候,每使用某級的標題,就自然將文字顯示成了這一級應該的字體大小。

2.1 style的定義

res\values目錄下,新建一個styles.xml文件; 在新建的文件中,使用\

2.2 style的繼承

style也可以從已有的style繼承而來。
style有兩種繼承方式,一種是顯式繼承,一種是隱式繼承。

2.2.1 顯示繼承

繼承已有的style時,使用parent=屬性, 在子style中,定義需要擴展或者需要覆蓋的屬性,

2.2.2 隱式繼承

繼承已有的style,給新style.為分隔符取名,例如"BtnStyle.ExBtnStyle,被繼承的style名稱要放在前面; 在子style中,定義需要擴展或者需要覆蓋的屬性,

2.3 style的使用

style有兩種使用方式。

直接針對具體的控件使用。
通過控件的style屬性設置,

提供給theme使用。
相關的內容請參考主題相關的章節。

2.4 style可用的各種屬性

style可以設置的屬性很多,不同的控件有不同的屬性。具體有哪些屬性可以設置,可以參考控件的開發文檔,例如TextView就有很多屬性,開發文檔都有列舉。

2.5 屬性值的設置

在對屬性值設置時,可以使用三種方式。

直接賦值:直接將要設定的值寫到\標簽當中,

#FFFFFFFF

@引用:將要設定的值通過@引用,設置給\標簽,這種引用是將要設定的值換了一個名字,


@color/text_color

引用:這種引用並不直接設置值,而是表明希望設置的值與“另一個屬性”的值相同;這“另一個屬性”定義在當前使用的主題當中(怎麼定義的會在主題相關的章節介紹),


?android:attr/textColorLink

/*******************************************************************/
* 版權聲明
* 本教程只在CSDN和安豆網發布,其他網站出現本教程均屬侵權。
/*******************************************************************/


第3節 主題-theme

主題theme由具備各種風格style的組件組合起來的。如果說style關注的是具體某個控件,那麼theme就關注的是整體宏觀的方面,例如一個Activity或者一個應用整體。

3.1 theme的定義

theme的定義與style的定義完全一樣,一樣的標簽、一樣的寫法,

res\values目錄下,新建一個themes.xml文件(如果使用styles.xml文件)也可以; 在新建的文件中,使用\

3.2 theme的繼承

theme的繼承與style的繼承完全一樣
theme也可以從已有的theme繼承而來。
themestyle一樣,有兩種繼承方式,一種是顯式繼承,一種是隱式繼承。

3.2.1 顯示繼承

繼承已有的theme時,使用parent=屬性, 在子theme中,定義需要擴展或者需要覆蓋的屬性,

3.2.2 隱式繼承

繼承已有的theme,給新theme.為分隔符取名,例如"MyTheme.ExMyTheme,被繼承的theme名稱要放在前面; 在子theme中,定義需要擴展或者需要覆蓋的屬性,

3.3 theme的使用

theme常用在兩種地方,一個是應用,一個是Activity。

3.3.1 應用使用theme

配置文件中設置:在項目工程的AndroidManifest.xml文件中,標簽的android:theme屬性,就用來指定整個應用的theme


    android:theme="@style/MyTheme">

java源碼中設置:當應用被創建的時候,在ApplicationonCreate()函數中設置,

@Override
public void onCreate() {
    super.onCreate();

    this.setTheme(R.style.MyTheme);
}

3.3.2 Activity使用theme

配置文件中設置:在項目工程的AndroidManifest.xml文件中,標簽的android:theme屬性,就用來指定該Activity的theme


    android:theme="@style/MyTheme">

java源碼中設置:當應用被創建的時候,在ActivityonCreate()函數中設置,

@Override
public void onCreate() {
    super.onCreate();

    this.setTheme(R.style.MyTheme);
}

3.4 屬性值的設置

在對屬性值設置時,可以使用三種方式,前兩種已經在style的相關章節介紹了,下面介紹?引用。

這種引用並不直接設置值,而是表明希望設置的值與“另一個屬性”的值相同;這“另一個屬性”定義在當前使用的主題當中,例如,

創建自定義屬性myAttr:在res\values目錄下創建一個attrs.xml文件,添加一個自定義屬性myAttr


    
    

定義一個theme-MyTheme,設置myAttr的值,


讓這個應用使用MyTheme,作為應用的主題(當然也可以指定某個具體的Activity使用這個主題),


    android:theme="@style/MyTheme">        

定義一個style-MyStyle,使用myAttr來指定按鈕文字的顏色,

為布局文件中的一個Button使用MyStyle

這樣,Button顯示的文字顏色就是MyThememyAttr指定的顏色了。

3.5 theme可用的各種屬性

theme可以設置的屬性很多,可以參考安卓的系統源碼themes.xml themes_device_defaults.xml themes_material.xml themes_holo.xml等,裡面使用了很多定義主題時用到的屬性。

不過裡面有的屬性是不對應用層開放的,在應用層使用的這些屬性的時候,如果遇到編譯錯誤,那麼多半就是這個原因。

系統主題的屬性很多,我們將選擇性的介紹一些重要屬性的用法和效果。

3.5.1 調色板屬性

調色板屬性是主題最為重要的屬性,它決定了主題的配色。這些屬性包括,

android:colorPrimaryDarkandroid:colorPrimaryandroid:colorAccentandroid:colorEdgeEffectandroid:colorControlNormalandroid:colorControlActivatedandroid:colorControlHighlightandroid:colorButtonNormalandroid:colorSwitchThumbNormal

如果一款應用設計了自己的配色方案,那麼修改這些屬性,會讓開發的效率大大提高。

例如colorAccent就被很多控件利用?訪問的方式使用到,一旦修改了它,很多控件的配色也就跟著變化了。例如,我們將該屬性的值設置成綠色,

\

其它屬性也對應著修改界面控件的某些顏色,由於它們都是和主題配色相關的屬性,所以稱它們為調色板屬性。

3.5.2 導航欄、狀態欄屬性

從安卓5.0起,Android SDK加入了對導航欄和狀態欄顏色的設定屬性,

導航欄:android:navigationBarColor

狀態欄:android:statusBarColor

\

3.6 系統主題

安卓系統內置了很多種主題,它們各有各的特點,也具有很多共同的性質。

按照設計思路,分成三個大類:

Theme:這是安卓系統剛誕生時使用的界面元素設計理念,具有暗色和亮色兩種風格;

\

Holo:這是安卓系統3.0時開始使用的界面元素設計理念,具有暗色和亮色兩種風格;

\

Material:這是安卓系統5.0時開始使用的界面元素設計理念,具有暗色和亮色兩種風格;

\

以上三個大類下面還有很多主題,可以通過Android Studio提供的preview工具看到這些主題。

打開任意一個布局文件,例如activity_main.xml; 點擊預覽窗口上紅色方框對應的圖標,會彈出一個Select Theme窗口; \

這裡分門別類的列舉出了所有可用的系統內置的主題。

最後需要特別的指出一個類型的主題:device default
它並不是除了theme holo material之外的第四類,而是為了安卓系統在不同版本上的兼容性而采取的兼容方案。

可以簡單的認為,當使用這種主題的應用在安卓3.0~安卓5.0之間的版本上運行時,它使用的主題就是holo;當使用這種主題的應用在安卓5.0以上的版本,它使用的主題就是material

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