Android中主题知识
Android主题发展过程
-
在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
Android Theme的分类
- android:Theme API 1 开始
- android:Theme.Holo API 11(android3.0) 开始
- android:Theme.DeviceDefault API 14(android4.0) 开始
- android:Theme.Material API 21(android5.0) 开始
- 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
使用系统主题的位置
- 使用非兼容包主题的方法:在style标签的parent里面输入“android:Theme”会有自动提示
- 使用兼容主题的方法。在style标签的parent里面输入“Theme”会有自动提示
为什么需要Theme.AppCompat主题
- android:Theme
- android:Theme.Holo
- 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
更多相关文章
- Android(安卓)UI设计小知识——渐变色背景的制作
- Android——LinearLayout按下(state_pressed)或获取焦点时(state
- 应用开发中的风格和主题(style,themes)
- Android(安卓)selector中设置 android:state_enabled 不起作用问
- Android(安卓)popupwindow以及windowManager总结——实现悬浮效
- iPhone 3G用Android安装包放出下载
- Android电话系统之RIL-Java
- Android中使用apache commons-net发送后台邮件的方法
- Android程序界面主题切换