Android主题发展过程

  1. 在Android3.0之前,Android的界面不论是从系统还是空间的主题都是按钮为白色,点击事件为黄色。现在看来很简陋

  2. 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的兼容

  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中的主题
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 没有TitleBarNoActionBar 没有ActionBarFullscreen 全屏风格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

使用系统主题的位置

  1. 使用非兼容包主题的方法:在style标签的parent里面输入“android:Theme”会有自动提示
  2. 使用兼容主题的方法。在style标签的parent里面输入“Theme”会有自动提示

为什么需要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版本的主题

如果我要在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                 状态栏颜色,默认使用colorPrimaryDark4.windowBackground          窗口背景颜色5.navigationBarColor           底部栏颜色6.colorForeground               应用的前景色,ListView的分割线,switch滑动区默认使用该颜色7.colorBackground              应用的背景色,popMenu的背景默认使用该颜色8.colorAccent                      CheckBox,RadioButton,SwitchCompat等一般控件的选中效果默认采用该颜色9.colorControlNormal          CheckBox,RadioButton,SwitchCompat等默认状态的颜色。10.colorControlHighlight      控件按压时的色调11.colorControlActivated      控件选中时的颜色,默认使用colorAccent12.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

更多相关文章

  1. Android(安卓)UI设计小知识——渐变色背景的制作
  2. Android——LinearLayout按下(state_pressed)或获取焦点时(state
  3. 应用开发中的风格和主题(style,themes)
  4. Android(安卓)selector中设置 android:state_enabled 不起作用问
  5. Android(安卓)popupwindow以及windowManager总结——实现悬浮效
  6. iPhone 3G用Android安装包放出下载
  7. Android电话系统之RIL-Java
  8. Android中使用apache commons-net发送后台邮件的方法
  9. Android程序界面主题切换

随机推荐

  1. RelativeLayout(相对布局)
  2. android:gravity和android:layout_gravit
  3. Android入门:ImageView介绍
  4. RelativeLayout用到的一些重要的属性:
  5. android全屏代码
  6. Android 之 Gallery画廊用法
  7. Binder解析
  8. Android MediaRecorder录制音频
  9. android shape的用法总结
  10. android布局属性详解分享