Android中的Style、Theme詳解以及發展史

sydMobile發表於2018-05-02

Style介紹

style就像單詞意思一樣,風格,這裡面是屬性的集合,如果頁面中有許多控制元件的屬性值相同那麼就可以把這些屬性抽出來放到style裡面,定義也很簡單,在values檔案下的styles裡面建立就可以了。
例如:

style定義

Style的使用

style使用

這個相對來說就簡單了,系統中也為我們預先定義了許多style,看了上一篇介紹的attr相信系統定義的這些style也會看懂吧。

文章最早釋出於我的微信公眾號 Android開發者家園 中,歡迎大家掃描下面二維碼關注微信公眾獲取更多知識內容。
本文為sydMobile原創文章,可以隨意轉載,但請務必註明出處!

###Theme

Theme和Style使用的是同一個元素標籤<style>區別在與 Theme 與 Style 作用的範圍不同,Theme 要求你設定到AndroidMainfest.xml的<application>或者<activity>中。這兩種設定,在不同的地方作用範圍也是不一樣的。

<application>中設定的話,那麼就是說你的整個應用的所有Activity都是使用的 Theme 裡面的風格了。在<activity>中設定的話,只是被設定的Activity中的 view 使用這個 Theme 裡面的屬性。

說起Theme來,就不得不說Android主題的進化史了,Theme的進化史也是Android系統的進步史。

Theme進化史

其實Theme沒有我們想象中的那麼高大上,就是主題。所謂的主題,我們來舉個例子:

比如我們房子裝修的進化史:剛開始住的都是破舊的土房,所以那管什麼房子裝修啊,能住就行了。最開始的Android也是這樣的,剛開始誰管你頁面內容醜不醜啊,能用就行了。你先在回頭看看系統在3.0以前的手機,保證你能被醜哭了。隨著社會的發展我們住上了瓦房子,裡面也該稍微裝修一下了,對應Android系統來說,在3.0以後Android系統也有了設計主題(Honeycomb holograghic theme全息主題),看上去好看一些了。再後來大家都住上了樓房,就有了裝修樣式。對應Android系統,在5.0的時候引入了Materail Design Theme 到此為止Android系統在主題上已經有了質的改變。

下面對應這幾個樣式我們來分別說一下,並簡單展示一下對應的APP執行出來是什麼樣子的。

Theme的基本類(所有Theme的父類) android:Theme API 1 開始 這個Theme是最基礎的Theme後面的Android Theme都是在這個基礎上進行的改變

Theme基礎

#####Theme基礎說明

下面是樣式是Theme的程式執行的結果

Theme樣式1

頁面中設定Button的樣式

Theme樣式2

點選Button的時候的呈現效果

Theme樣式3
CheckBox和ProgressBar的樣式展現效果

Theme樣式4

Dialog 樣式

最初的時候Android開發就是使用的這個Theme,這個針對的只是API 11之前開發APP的,所以 在現在說來這個主題已經過時了,不過後API新出來的主題都是繼承了這個主題。

在 API11之前開發出來的軟體如果使用預設主題的話,按鈕為白色,點選事件是黃色,總之就是 很醜陋,沒有設計美感。你可以執行一個Android3.0的模擬機看看系統畫面就知道這個Theme了(注意一定要是原始Android系統)

Holo主題

Holo主題

在Android3.0(API 11 開始引進,Google推出了Holo主題(Honeycomb holograghic theme全息主題))。

這個主題比起之前的主題有了很大的變化。之後在4.0(API14)的時候google又釋出了更加規範的設計Android Design,這樣就有更多的Android應用採用了Holo主題了。所以我們一般認為是在Android4.0後用了Holo主題,其實在Android3.0的時候就已經引進了,在4.0的時候才更加規範了。

如果你想要你的 App 在 Android4.0 之前的手機上顯示為Holo主題的話應該怎麼做呢?很簡單,這個時候就需要我們的v4、v7包了,這個時候就體現這兩個包的價值了,其實這倆包就是為了你的App可以在老版本的Android系統上使用最新的 Android API 功能所誕生的。v4的包意思就是相容到API為4的android手機(Android1.6),v7的包是相容到API為7的Android手機(Android2.1),如果你考慮到你的程式在1.6以上的Android系統上可以使用Holo主題的話,就使用你的compileSdkVersion的SDK版本所對應的相容包裡面的樣式就可以了。關於相容包的內容之後再單獨寫篇文章介紹一下吧。

採用Holo主題的APP的執行效果

Holo1

CheckBox和ProgressBar的樣式

Holo2

點選ListView的時候的效果

看起來是不是比最初的Theme要好很多啊,感覺很有科技感把。

#####Materail Theme

最有設計藝術的 Theme 來了,早前的UI都是拿著蘋果手機的APP來設計APP的樣式,是因為Android早期確實沒有什麼設計美感,在Android5.0就不同了,可以說Android5.0是Android的一個分水嶺把,從Android5.0以後Android無論在執行還是設計美感上都一點也不輸給iOS了。在Android5.0,Google推出了 Material theme(材料設計),這個設計可謂是重磅啊。這個設計風格很多iOS的應用也在使用。

Material Design官網的介紹:Material Design 是我們將經典的設計原則和科技、創新相結合而創造的設計語言。這份文件會隨著我們對 Material Design 的探索而不斷更新。

這是所有優秀的設計師都應該學習的設計風格,如果設計出一款完全符合Material Design的APP,肯定會讓使用者眼前一亮!

Material Design的官網 :https://material.io/

中文翻譯: https://www.mdui.org/design/

許多優秀的APP設計就是來自官網的靈感

Material1

Material2

具體的樣式風格種類可以參考:https://blog.csdn.net/tuke_tuke/article/details/73188426 總結的很詳細

###小的知識點

v7包內的Activity類的樣式必須和v7包內的Theme搭配如果Activity繼承自普通包內的Activity的話,則樣式不建議使用v7包內,如果使用v7包裡面的樣式也達不到想要的相容效果,會根據手機系統的版本出現不同的Theme,所以v7包裡面的Theme還是要和v7包內的Activity搭配。

compile 'com.android.support:appcompat-v7:24.2.1' v7後面的24.2.1說的這個v7包推出的版本號,也就是API24推出的,如果後面是小於21的話,則v7包內的樣式相容的就是Holo樣式而不是Materail樣式了,也就是說雖然都是v7包,但是版本不同,裡面對應的內容也是不同的。

一個APP好的設計應該是在有自己的Theme但是要遵循Materail設計,我們應該定義好屬於我們自己的Theme,應用到APP的風格中,所有的控制元件風格應該是在value中統一定義的。

如果系統預設定義的某個樣式不符合你審美,你就可以定義自己的Theme,不過要繼承系統的Theme,然後修改裡面的某一方面的樣式風格就可以了。比如修改Button的預設樣式風格等等,都是可以的!

更多資料乾貨可以關注我的公眾號!

歡迎大家關注我的微信公眾號,和我交流分享

個人建立了一個微信群,裡面有行業的大佬,會不斷的分享一些優質文章,交流技術,談天說地。想要加入的可以新增我好友,拉你進群。早點找到組織,困惑會在交流中消失!

image

相關文章