在Android3.0之前,Android的界面不论是从系统还是空间的主题都是按钮为白色,点击事件为黄色。现在看来很简陋
Holo主题:Android3.0 (API11)开始,Google推出了Holo主题(就是我们印象中的黑底白字蓝主色的主题)。在4.0google又发布了应用设计规范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的兼容
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
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 兼容主题的白色主题
Black 黑色风格
Light 光明风格
Dark 黑暗风格
DayNight 白昼风格
Wallpaper 墙纸为背景
Translucent 透明背景
Panel 平板风格
Dialog 对话框风格
NoTitleBar 没有TitleBar
NoActionBar 没有ActionBar
Fullscreen 全屏风格
MinWidth 对话框或者ActionBar的宽度根据内容变化,而不是充满全屏
WhenLarge 对话框充满全屏
TranslucentDecor 半透明风格
NoDisplay 不显示,也就是隐藏了
WithActionBar 在旧版主题上显示ActionBar
常用的theme项:
•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" 背景为白色的内容容器
所有Theme主题:
- true
- false
- false
- @drawable/abc_item_background_holo_dark
- ?attr/selectableItemBackground
- @drawable/abc_ic_ab_back_mtrl_am_alpha
- @drawable/abc_list_divider_mtrl_alpha
- @drawable/abc_list_divider_mtrl_alpha
- @style/Widget.AppCompat.ActionBar.TabView
- @style/Widget.AppCompat.ActionBar.TabBar
- @style/Widget.AppCompat.ActionBar.TabText
- @style/Widget.AppCompat.ActionButton
- @style/Widget.AppCompat.ActionButton.Overflow
- @style/Widget.AppCompat.PopupMenu.Overflow
- @style/Widget.AppCompat.ActionBar.Solid
- ?attr/actionBarStyle
- @null
- @style/ThemeOverlay.AppCompat.ActionBar
- @dimen/abc_action_bar_default_height_material
- ?attr/dividerVertical
- ?attr/selectableItemBackgroundBorderless
- @style/TextAppearance.AppCompat.Widget.ActionBar.Menu
- ?android:attr/textColorPrimaryDisableOnly
- @style/Widget.AppCompat.Spinner.DropDown.ActionBar
- @style/Widget.AppCompat.ActionMode
- @drawable/abc_cab_background_top_material
- ?attr/colorPrimaryDark
- @drawable/abc_ic_ab_back_mtrl_am_alpha
- @style/Widget.AppCompat.ActionButton.CloseMode
- @drawable/abc_ic_menu_cut_mtrl_alpha
- @drawable/abc_ic_menu_copy_mtrl_am_alpha
- @drawable/abc_ic_menu_paste_mtrl_am_alpha
- @drawable/abc_ic_menu_selectall_mtrl_alpha
- @drawable/abc_ic_menu_share_mtrl_alpha
- @dimen/abc_panel_menu_list_width
- @style/Theme.AppCompat.CompactMenu
- @drawable/abc_menu_hardkey_panel_mtrl_mult
- @android:color/transparent
- @drawable/abc_list_selector_holo_dark
- @style/TextAppearance.AppCompat.Subhead
- @style/TextAppearance.AppCompat.Subhead
- 64dp
- 48dp
- 80dp
- 16dip
- 16dip
- @style/Widget.AppCompat.DropDownItem.Spinner
- ?attr/listPreferredItemHeightSmall
- @style/Widget.AppCompat.PopupMenu
- @style/TextAppearance.AppCompat.Widget.PopupMenu.Large
- @style/TextAppearance.AppCompat.Widget.PopupMenu.Small
- @style/Widget.AppCompat.ListPopupWindow
- @style/Widget.AppCompat.ListView.DropDown
- @style/Widget.AppCompat.SearchView
- @style/Widget.AppCompat.DropDownItem.Spinner
- @color/abc_search_url_text
- @style/TextAppearance.AppCompat.SearchResult.Title
- @style/TextAppearance.AppCompat.SearchResult.Subtitle
- @style/Widget.AppCompat.ActivityChooserView
- @style/Widget.AppCompat.Toolbar
- @style/Widget.AppCompat.Toolbar.Button.Navigation
- @style/Widget.AppCompat.EditText
- @drawable/abc_edit_text_material
- ?android:attr/textColorPrimary
- @style/Widget.AppCompat.AutoCompleteTextView
- @color/primary_dark_material_dark
- @color/primary_material_dark
- @color/accent_material_dark
- ?android:attr/textColorSecondary
- ?attr/colorAccent
- @color/ripple_material_dark
- @color/button_material_dark
- @color/switch_thumb_normal_material_dark
- @style/Widget.AppCompat.DrawerArrowToggle
- @style/Widget.AppCompat.CompoundButton.Switch
- @style/Widget.AppCompat.RatingBar
- @style/Widget.AppCompat.Button
- @style/Widget.AppCompat.Button.Small
- @style/TextAppearance.AppCompat.Button
这三个主题就对应了上一节说的三种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版本的主题
如果我要在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即可
使用了Theme.AppCompat之后,targetSdkVersion就不受影响了。应用使用了Theme.AppCompat主题,不论我们的targetSdkVersion指定为多少,跑在任意版本的系统上都会呈现出Material主题
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)
参考文章地址
https://blog.csdn.net/tuke_tuke/article/details/73188426
https://blog.csdn.net/jack__frost/article/details/51998863