Android系统主题总结和使用
一,Android主題的發展過程
1,在Android3.0之前,Android的界面不論是從系統還是空間的主題都是按鈕為白色,點擊事件為黃色。現在看來很簡陋。
2,Holo主題:Android3.0 (API11)開始,Google推出了Holo主題(就是我們印象中的黑底白字藍主色的主題)。在4.0重google又發布了應用設計規范Android Design。有了設計規范的指導,就有了更多的應用采用Holo主題。所以我們可以簡單認為Android Design就是Holo主題。但是這種主題是適合移動設備,其他平臺略顯突兀。
? ? ? 在4.0之前Android可以說是沒有設計可言的,在4.0之后推出了Android Design,從此Android在設計上有了很大的改善,而在程序實現上相應的就是Holo風格,所以你看到有類似 Theme.Holo.Light、 Theme.Holo.Light.DarkActionBar 就是4.0的設計風格,但是為了讓4.0之前的版本也能有這種風格怎么辦呢?這個時候就不得不引用v7包了,所以對應的就有 Theme.AppCompat.Light、Theme.AppCompat.Light.DarkActionBar,如果你的程序最小支持的版本是API14(即Android 4.0),那么可以不用考慮v7的兼容。
3,Material 主題:從Android5.0(API21)開始,Google又推出了材料設計語言Material Design,又叫Google Design。MD崇尚的就是圖層扁平化,所有圖層像紙或者卡片一樣重疊在一起,所以Android5.0就有了RecyclerView和CardView。圖層之間有間隔,所以Android5.0中有了translation和elevation兩個屬性。同時也規范了Android的運動元素,界面上的每個元素不是無故產生的,同時每個圖層的產生和消失都有方向的約定,從哪里來就往哪里去,這也是為什么Android 5.0中會有Ripple,Circular Receal,Activity Transition.
? ? ?Android在5.0版本推出了Material Design的概念,這是Android設計上又一大突破。對應的程序實現上就有Theme.Material.Light、 Theme.Material.Light.DarkActionBar等,但是這種風格只能應用在在5.0版本的手機,如果在5.0之前應用Material Design該怎么辦呢?同樣的引用appcompat-v7包,這個時候的Theme.AppCompat.Light、Theme.AppCompat.Light.DarkActionBar就是相對應兼容的Material Design的Theme。
二,Android Theme的分類
? ? 1,android:Theme ? ? ? ? ? ? ? ? ? ? ? ? ? ? API 1 開始
? ? 2,android:Theme.Holo ? ? ? ? ? ? ? ? ? ? API 11(android3.0) 開始
? ? 3,android:Theme.DeviceDefault ? ? ?API 14(android4.0) 開始
? ? 4,android:Theme.Material ? ? ? ? ? ? ? API 21(android5.0) 開始
? ? 5,Theme.AppCompat ? ? ? ? ? ? ? ? ? ? ?兼容包AppCompat_v7中的主題
三,使用系統主題的位置
??1,使用非兼容包主題的方法:在style標簽的parent里面輸入“Android:Theme”會有自動提示
? Theme主題和DeviceDefault主題
Holo主題
Material主題
? 2,使用兼容主題的方法。在style標簽的parent里面輸入“Theme”會有自動提示
API 1: android:Theme 根主題 android:Theme.Black 背景黑色 android:Theme.Light 背景白色 android:Theme.Wallpaper 以桌面墻紙為背景 android:Theme.Translucent 透明背景 android:Theme.Panel 平板風格 android:Theme.Dialog 對話框風格API 11: android:Theme.Holo Holo根主題 android:Theme.Holo.Black Holo黑主題 android:Theme.Holo.Light Holo白主題API 14: Theme.DeviceDefault 設備默認根主題 Theme.DeviceDefault.Black 設備默認黑主題 Theme.DeviceDefault.Light 設備默認白主題API 21: (網上常說的 Android Material Design 就是要用這種主題) Theme.Material Material根主題 Theme.Material.Light Material白主題兼容包v7中帶的主題: Theme.AppCompat 兼容主題的根主題 Theme.AppCompat.Black 兼容主題的黑色主題 Theme.AppCompat.Light 兼容主題的白色主題
更多主題:
以下都是指“包含”,比如包含“Dialog”表示對話框風格
比如Theme.Dialog、Theme.Holo.Dialog、Theme.Material.Dialog、Theme.AppCompat.Dialog都是對話框風格
具體有沒有這種組合,你就在“自動提示”中來看就可以,提示有就有,沒有就沒有。
Black 黑色風格 Light 光明風格 Dark 黑暗風格 DayNight 白晝風格 Wallpaper 墻紙為背景 Translucent 透明背景 Panel 平板風格 Dialog 對話框風格 NoTitleBar 沒有TitleBar NoActionBar 沒有ActionBar Fullscreen 全屏風格 MinWidth 對話框或者ActionBar的寬度根據內容變化,而不是充滿全屏 WhenLarge 對話框充滿全屏 TranslucentDecor 半透明風格 NoDisplay 不顯示,也就是隱藏了 WithActionBar 在舊版主題上顯示ActionBar
常見主題
?android:theme="@android:style/Theme.Dialog" 將一個Activity顯示為能話框模式 ?android:theme="@android:style/Theme.NoTitleBar" 不顯示應用程序標題欄 ?android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 不顯示應用程序標題欄,并全屏 ?android:theme="Theme.Light" 背景為白色 ?android:theme="Theme.Light.NoTitleBar" 白色背景并無標題欄 ?android:theme="Theme.Light.NoTitleBar.Fullscreen" 白色背景,無標題欄,全屏 ?android:theme="Theme.Black" 背景黑色 ?android:theme="Theme.Black.NoTitleBar" 黑色背景并無標題欄 ?android:theme="Theme.Black.NoTitleBar.Fullscreen" 黑色背景,無標題欄,全屏 ?android:theme="Theme.Wallpaper" 用系統桌面為應用程序背景 ?android:theme="Theme.Wallpaper.NoTitleBar" 用系統桌面為應用程序背景,且無標題欄 ?android:theme="Theme.Wallpaper.NoTitleBar.Fullscreen" 用系統桌面為應用程序背景,無標題欄,全屏 ?android:theme="Translucent" 背景為透明 ?android:theme="Theme.Translucent.NoTitleBar" 透明背景并無標題欄 ?android:theme="Theme.Translucent.NoTitleBar.Fullscreen" 透明背景并無標題欄,全屏 ?android:theme="Theme.Panel" 內容容器 ?android:theme="Theme.Light.Panel" 背景為白色的內容容器
AppCompat_v7兼容包主題細分:(以'com.android.support:appcompat-v7:25.1.0'為例:)
Theme.AppCompat 作用于Activity層面以上的主題
Base、Platform 作為父類被繼承的,一般不直接使用
AlertDialog.AppCompat 對話框深色
AlertDialog.AppCompat.Light 對話框淺色
Animation.AppCompat.Dialog 帶動畫效果的對話框
Animation.AppCompat.DropDownUp
RtlOverlay.Widget.AppCompat
RtlUnderlay.Widget.AppCompat
TextAppearance.AppCompat 文字樣式相關
ThemeOverlay.AppCompat
Widget.AppCompat 控件相關的主題
關于Theme.ApCompat兼容主題
主題間的繼承關系:(以Theme.AppCompat為例)
Theme.AppCompat ——> Base.Theme.AppCompat
Base.Theme.AppCompat ——> Base.V*.Theme.AppCompat (*可能是7、21、23等)
Base.V*.Theme.AppCompat ——> Platform.AppCompat
Platform.AppCompat ——> android:Theme
其中第二步:版本25.1.0有四種選擇:Base、Base.V21、Base.V22、Base.V23。(更早的版本還有V7、V11等)
兼容:App在運行時會根據系統的版本選擇對應的父類主題。大于21選擇V21,大于22選擇V22
系統通常預定義的主題樣式:
Theme.AppCompat 深色主題
Theme.AppCompat.NoActionBar 沒有ActionBar
Theme.AppCompat.Dialog 對話框適用
Theme.AppCompat.Dialog.Alert 警告框適用(根據屏幕決定寬度)
Theme.AppCompat.Dialog.MinWidth 對話框適用(根據內容決定寬度)
Theme.AppCompat.DialogWhenLarge 充滿屏幕(繼承自Theme.AppCompat,但沒有擴展)
Theme.AppCompat.CompactMenu 看名字是用于Menu菜單。未驗證
其他主題系統默認都會有上述幾種類型的子主題,以此類推就好。
例如:淺色主題只需要將Theme.AppCompat 替換成 Theme.AppCompat.Light即可
四,為什么需要Theme.AppCompat主題?
那么這個Theme.AppCompat到底是什么呢?就要從其他的三個系統基本主題說起
? ? ? ? ? 1,android:Theme
? ? ? ? ? 2,android:Theme.Holo
? ? ? ? ? 3,android:Theme.Material
是的,這三個主題就對應了上一節說的三種Android主題。android:Theme是所有主題的超級父類。所有的主題都是它繼承或者間接繼承來的。android:Theme.Holo從Api 11開始才可以使用。android:Theme.Material從Api 21開始可以使用。
如果我們要在不同版本的系統上用各自的主題,比如在4.0之下的系統用android:Theme,4.0至5.0的系統用Holo主題,5.0及之后的系統使用Material Design,那我們需要建不同的value-vX目錄。在各自的目錄中的style繼承相應的系統主題。在運行是系統就會根據平臺版本使用相應的主題。如果使用的主題沒有找到,那么系統就會根據App指定的targetSdkVersion自動設置主題,假如設置的targetSdkVersion超過了系統的版本,系統就設置為支持的最高系統sdk版本的主題。
最后一句話怎么理解,舉個例子,如果在我們在Api 24的sdk下進行開發,設置我們的應用targetSdkVersion=16,應用的資源目錄下建立value-16,這是針對4.4以上平臺的資源目錄,在styles.xml中我們繼承android:Theme.Material,這很明顯是在5.0系統之上才能用的。雖然Android Studio會給出提示,但可以編譯通過。現在我們把App放在一臺4.4的機器上跑,這時系統是找不到android:Theme.Material這個主題的。那么系統就會看targtSdkVersion,發現是16,所以系統就會將App的主題設置為Holo的。如果我們其他的所有配置都不變,只把targetSdkVersion改成9,系統就會把App的主題設置為android:Theme的主題。這時如果把targetSdkVersion改成24,4.4的機器是不支持24的,那么出來的效果依然是android:Theme.Holo主題。
那么有同學就要問了,如果我要在Android 4.4(支持Holo主題)的機器上使用Material主題(Android 5.0)怎么辦呢?(就是低版本要使用高版本的系統主題)沒事,Google已經幫我們想好了解決方案。畢竟Google希望在不同的平臺和版本上推廣Material Design嘛。這樣才能給用戶提供一致性的體驗。介于此,Android里就有了Theme.AppCompat主題和AppCompatActivity。細心的同學也會發現現在用Android Studio新建一個工程,默認的MainActivity繼承的是AppCompatActivitiy,默認的主題就是Theme.AppCompat。
我們先來說Theme.AppCompat,這個主題可以讓5.0以下的系統使用Material主題。我們只需要讓我們的系統主題繼承Theme.AppCompat即可。只需要指定這個就OK了,是不是很簡單。
有必要說的是,使用了Theme.AppCompat之后,targetSdkVersion就不受影響了。繼續拿上一節的例子說,在Api24 Sdk下開發,targtSdkVersion=9,跑在4.4的機器上,你會發現依然是Material主題。
所以可以總結出,應用使用了Theme.AppCompat主題,不論我們的targetSdkVersion指定為多少,跑在任意版本的系統上都會呈現出Material主題。
五,Android Material Design 詳解(使用support v7兼容5.0以下系統)
? ? ?Material Design是Google在2014年的I/O大會上推出的全新設計語言。Material Design是基于Android 5.0(API level 21)的,兼容5.0以下的設備時需要使用版本號v21.0.0以上的support v7包中的appcpmpat,不過遺憾的是support包只支持Material Design的部分特性。使用eclipse或Android Studio進行開發時,直接在Android SDK Manager中將Extras->Android Support Library升級至最新版即可。
dependencies {compile fileTree(dir: 'libs', include: ['*.jar'])testCompile 'junit:junit:4.12'compile 'com.android.support:appcompat-v7:23.4.0' } 1.創建一個Android應用,應用主題Theme.AppCompat(或其子主題,如Theme.AppCompat.Light.DarkActionBar)
apply plugin: 'com.android.application'android {compileSdkVersion 23buildToolsVersion "24.0.3"defaultConfig {applicationId "com.tuke.customtheme"minSdkVersion 15targetSdkVersion 23versionCode 1versionName "1.0"}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}} }dependencies {compile fileTree(dir: 'libs', include: ['*.jar'])testCompile 'junit:junit:4.12'compile 'com.android.support:appcompat-v7:23.4.0' } 本文中示例程序使用minSdkVersion=15,即屬于使用support包實現Material Design風格
自動生成的activity默認繼承AppCompatActivity
public class CustomTheme extends AppCompatActivity {//繼承AppCompatActivity@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_custom_theme);} }
CustomTheme的主題默認是
<!-- Base application theme. --><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>
2.如果想自定義主題,自定義程序所使用的主題的某些屬性,示例:
<resources><!-- Base application theme. --><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><item name="android:textColorPrimary">@color/textColorPrimary</item><item name="android:windowBackground">@color/windowBackground</item><item name="android:textColor">@color/textColor</item><item name="android:colorControlNormal">@color/colorControlNormal</item></style><style name="myTheme" parent="android:t"></style></resources>
1.colorPrimary ? ? ? ? ? ? ? ? ? ? 應用的主要色調,actionBar默認使用該顏色,Toolbar導航欄的底色
2.colorPrimaryDark ? ? ? ? ? ? 應用的主要暗色調,statusBarColor默認使用該顏色
3.statusBarColor ? ? ? ? ? ? ? ? 狀態欄顏色,默認使用colorPrimaryDark
4.windowBackground ? ? ? ? ?窗口背景顏色
5.navigationBarColor ? ? ? ? ? 底部欄顏色
6.colorForeground ? ? ? ? ? ? ? 應用的前景色,ListView的分割線,switch滑動區默認使用該顏色
7.colorBackground ? ? ? ? ? ? ?應用的背景色,popMenu的背景默認使用該顏色
8.colorAccent ? ? ? ? ? ? ? ? ? ? ?CheckBox,RadioButton,SwitchCompat等一般控件的選中效果默認采用該顏色
9.colorControlNormal ? ? ? ? ?CheckBox,RadioButton,SwitchCompat等默認狀態的顏色。
10.colorControlHighlight ? ? ?控件按壓時的色調
11.colorControlActivated ? ? ?控件選中時的顏色,默認使用colorAccent
12.colorButtonNormal ? ? ? ? ?默認按鈕的背景顏色
13.editTextColor: ? ? ? ? ? ? ? 默認EditView輸入框字體的顏色。
14.textColor ? ? ? ? ? ? ? ? ? ? ? ? Button,textView的文字顏色
15.textColorPrimaryDisableOnly ? ? ? ? ? RadioButton checkbox等控件的文字
16.textColorPrimary ? ? ? ? ? ?應用的主要文字顏色,actionBar的標題文字默認使用該顏色
17.colorSwitchThumbNormal: ? ? ? ? ? ? switch thumbs 默認狀態的顏色. (switch off)
Android5.0設置主題樣式:
<style name="RedTheme" parent="android:Theme.Material"><!-- 狀態欄顏色,會被statusBarColor效果覆蓋--><item name="android:colorPrimaryDark">@color/status_red</item><!-- 狀態欄顏色,繼承自colorPrimaryDark --><item name="android:statusBarColor">@color/status_red</item><!-- actionBar顏色 --><item name="android:colorPrimary">@color/action_red</item><!-- 背景顏色 --><item name="android:windowBackground">@color/window_bg_red</item><!-- 底部欄顏色 --><item name="android:navigationBarColor">@color/navigation_red</item><!-- ListView的分割線顏色,switch滑動區域色--><item name="android:colorForeground">@color/fg_red</item><!-- popMenu的背景色 --><item name="android:colorBackground">@color/bg_red</item><!-- 控件默認顏色 ,效果會被colorControlActivated取代 --><item name="android:colorAccent">@color/control_activated_red</item><!-- 控件默認時顏色 --><item name="android:colorControlNormal">@color/control_normal_red</item><!-- 控件按壓時顏色,會影響水波紋效果,繼承自colorAccent --><item name="android:colorControlHighlight">@color/control_highlight_red</item><!-- 控件選中時顏色 --><item name="android:colorControlActivated">@color/control_activated_red</item><!-- Button的默認背景 --><item name="android:colorButtonNormal">@color/button_normal_red</item><!-- Button,textView的文字顏色 --><item name="android:textColor">@color/white_text</item><!-- RadioButton checkbox等控件的文字 --><item name="android:textColorPrimaryDisableOnly">@color/white_text</item><!-- actionBar的標題文字顏色 --><item name="android:textColorPrimary">@color/white_text</item></style>
參考文章:
http://blog.csdn.net/jack__frost/article/details/51998863
http://www.2cto.com/kf/201412/362272.html
http://blog.csdn.net/wjc295/article/details/54347807
http://www.cnblogs.com/Jude95/p/4369816.html
http://blog.csdn.net/zl18603543572/article/details/49754933
http://www.aoaoyi.com/archives/623.html
總結
以上是生活随笔為你收集整理的Android系统主题总结和使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AndroidStudio项目提交(更新
- 下一篇: android sina oauth2.