简介:主题决定了App的展示效果,我们可以为整个Application指定样式,也可以为Activity单独指定样式,甚至可以为各个控件如Button、TextView指定样式。
一、Theme的来源分类
系统的主题
第三方库的主题
兼容包如support_v7.jar的主题
用户自定义的主题
二、引用方式
自定义主题、兼容包:"@style/AppTheme"
兼容包:AndroidManifests.xml中"@style/Theme.Appcompat",其他地方使用“Theme.Appcompat”即可
系统主题:"@android:style/Theme.Holo.Light"
三、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中的主题
主题的不同版本:
Theme
Theme 深色主题
Theme.Light 浅色主题
位置:sdk/platforms/android-25/data/res/values/themes.xml
简介:许多主题的最终父类主题
Theme.Holo
Theme.Holo 深色主题
Theme.Holo.Light 浅色主题
位置:sdk/platforms/android-25/data/res/values/themes_holo.xml
简介:android 11 - 13 的默认主题
Theme.DeviceDefault
Theme.DeviceDefault 深色主题
Theme.DeviceDefault.Light 浅色主题
位置:sdk/platforms/android-25/data/res/values/themes_device_defaults.xml
简介:android 14以上的默认主题,在不同系统版本的设备上可以提供不同的样式
Theme.Material
Theme.Material 深色主题
Theme.Material.Light 浅色主题
位置:sdk/platforms/android-25/data/res/values/themes_material.xml
简介:Material Design的样式
Theme.Leanback 不知道是什么主题,暂且罗列在此
位置:sdk/platforms/android-25/data/res/values/themes_leanback.xml
-----------------------------------------------------------------------------------------------------
AppCompat_v7兼容包主题细分:
(以‘com.android.support:appcompat-v7:25.1.0‘为例:)
AlertDialog.AppCompat 对话框深色
AlertDialog.AppCompat.Light 对话框浅色
Animation.AppCompat.Dialog 带动画效果的对话框
Animation.AppCompat.DropDownUp
Theme.AppCompat 使用与Activity层面以上的主题
Base、Platform开头的主题 都是作为父类被继承的,一般不直接使用
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
例如:使用DatePicker、CalendarView等在不同版本手机上安装会展示不同的样式
----------------------------------------------------------------------------------------------------
系统通常预定义的主题样式
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即可
==========================================================
常见的样式属性摘记
android:windowFullscreen 隐藏状态栏
windowActionBar 是否显示ActionBar
windowNoTitle 是否显示TitleBar,经常和windowActionBar一起使用
本文出自 “一剑围城” 博客,请务必保留此出处http://weijiancheng.blog.51cto.com/10190955/1891175
原文:http://weijiancheng.blog.51cto.com/10190955/1891175