http://www.cnblogs.com/zhouyou96/p/5323138.html
在AndroidManifest.xml文件中有<application android:theme="@style/AppTheme">,其中的@style/AppTheme是引用的res/values/styles.xml 中的主题样式,也有可能是引用的 res/values-v11/styles.xml 或者 res/values-v14/styles.xml,这是根据运行此程序的手机系统来决定的,如果手机系统的API版本是11以上就是v11/styles.xml,以此类推。在values/styles.xml中你会发现AppTheme的主题样式又是继承自AppBaseTheme,而AppBaseTheme的父主题就各有不同了,你也可以从这个位置来自己修改主题,此文章主要就是来讨论这个主题如何修改。
需要注意的是,做为初学者或者专门来研究主题(Theme),你最好是删除values-v11和values-v14以及values-vXX,以免被这些东西所干扰。
主题的来源有三个:
1) 来自Android系统自带的
2) 来自兼容包的(比如v7兼容包)
3) 你自己写一个主题
这里主要探讨前两者,自己写主题不探讨。
使用android系统中自带的主题要加上“android:”,如:android:Theme.Black
使用v7兼容包中的主题不需要前缀,直接:Theme.AppCompat
在Android Studio中书写主题时都会有自动提示,而在Eclipse不会有自动提示
解决办法是不要写“android:Theme.Black”,而是写“@android:style/Theme.Black”这样就会有提示不要写“Theme.AppCompat”,而是写“@style/Theme.AppCompat”因为 style(@android:style/Theme.Black) 与 theme(android:Theme.Black) 在使命上还是有区别的,所以在eclipse中书写时为了出现自动提示,可以写“@android:style/Theme.Black”,但是写完了之后,记得手动的改为“android:Theme.Black”
现在看看有些什么主题
系统自带主题:
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 兼容主题的白色主题
Theme.AppCompat主题是兼容主题,是什么意思呢?
意思就是说如果运行程序的手机API是21则就相当于是Material主题,如果运行程序的手机API是11则就相当于是Holo主题,以此类推
兼容包v7会被Google公司不断升级:
比如 appcompat-v7-21.0 表示升级到向 API 21 兼容比如 appcompat-v7-23.2 表示升级到向 API 23 兼容 在eclipse中只能看到 appcompat_v7 后面没有跟API的版本号,如何识别呢?可以在eclipse中展开v7项目的res文件夹,查看有没有values-21、values-23这样的文件夹,最大数字就是API版本号了。 所以同样是v7兼容包,会有API版本号不同的区别,要注意。
所有能应用于应用程序主题都是以“Theme.”开头
不是以“Theme.”开头的就不是应用程序主题,而是用于某些局部控件比如“ThemeOverlay”主题,可用于 Toolbar 控件,这里不做深入分析了。比如“TextAppearance”主题,可用于设置文字外观,这里不做深入分析了。比如在v7中有很多以“Base”开头的主题,是一些父主题,不建议直接使用。更多主题:以下都是指“包含”,比如包含“Dialog”表示对话框风格比如Theme.Dialog、Theme.Holo.Dialog、Theme.Material.Dialog、Theme.AppCompat.Dialog都是对话框风格具体有没有这种组合,你就在“自动提示”中来看就可以,提示有就有,没有就没有。
Black 黑色风格
Light 光明风格Dark 黑暗风格DayNight 白昼风格Wallpaper 墙纸为背景Translucent 透明背景Panel 平板风格Dialog 对话框风格NoTitleBar 没有TitleBarNoActionBar 没有ActionBarFullscreen 全屏风格MinWidth 对话框或者ActionBar的宽度根据内容变化,而不是充满全屏WhenLarge 对话框充满全屏TranslucentDecor 半透明风格NoDisplay 不显示,也就是隐藏了WithActionBar 在旧版主题上显示ActionBar
很多主题在使用时会报错,原因有很多,比如窗体必须继承AppCompactActivity,或者要继承ActionBarActiivty,或者要继承FragmentActivity,或者需要手动指定宽高,或者需要提升最低API版本,或者需要更高版本的SDK,或者兼容包版本不对等原因。
使劲折腾吧!!!
写得不好,请批评指正。