在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 没有TitleBar
NoActionBar 没有ActionBar
Fullscreen 全屏风格
MinWidth 对话框或者ActionBar的宽度根据内容变化,而不是充满全屏
WhenLarge 对话框充满全屏
TranslucentDecor 半透明风格
NoDisplay 不显示,也就是隐藏了
WithActionBar 在旧版主题上显示ActionBar

很多主题在使用时会报错,原因有很多,比如窗体必须继承AppCompactActivity,或者要继承ActionBarActiivty,或者要继承FragmentActivity,或者需要手动指定宽高,或者需要提升最低API版本,或者需要更高版本的SDK,或者兼容包版本不对等原因。

使劲折腾吧!!!

写得不好,请批评指正。

转载于:https://www.cnblogs.com/zhouyou96/p/5323138.html

总结一下Android中主题(Theme)的正确玩法相关推荐

  1. jQuery Mobile中主题theme样式a-z

    全栈工程师开发手册 (作者:栾鹏) jQuery Mobile 所有class选项 jQuery Mobile中主题theme样式 Classes 字母 (a-z) 意为样式可以指定 a 到 z.例如 ...

  2. android压感测试,安卓最强压感识别的正确玩法

    安卓最强压感识别的正确玩法 2015年11月18日 11:51作者:广州分站文章出处:泡泡网原创 分享 智能压感屏幕一直被外界认为是手机最具潜力体验创新,然而截止今年下半年,带有创新体验的产品仍然屈指 ...

  3. moments此服务器的证书无效,群晖NAS相册的正确玩法!使用Moments的朋友必看!强烈推荐搭配DS Photo使用!...

    群晖NAS相册的正确玩法!使用Moments的朋友必看!强烈推荐搭配DS Photo使用! 2020-02-18 09:39:53 512点赞 4991收藏 612评论 创作立场声明:群晖的Momen ...

  4. vmci.sys版本不正确_王者荣耀:当前版本辅助的正确玩法思路,别再被骂,也别再梦游了...

    辅助一直都是王者荣耀里一个很重要的位置,虽然低段位有些时候辅助不重要,但这只是在有大神的情况下,在大部分时候,其实还是很需要辅助的,但是我们都知道,辅助这个位置由于给人一种不重要的错觉,不仅队友会这么 ...

  5. 拳王虚拟项目公社:2020年虚拟资源项目的最新正确玩法

    今晚分享的项目是:2020年虚拟项目正确玩法 一.首先来看下案例 案例一: 打开淘宝搜索"素材" 我们可以看到月销售都是上万的,就按单价,每单3元计算,一个月一万单就是三万,这三万 ...

  6. 拳王虚拟项目公社:2020年虚拟资源项目的特别的最新正确玩法

    今晚分享的项目是:2020年虚拟项目正确玩法 一.首先来看下案例 案例一: 打开淘宝搜索"素材" 我们可以看到月销售都是上万的,就按单价,每单3元计算,一个月一万单就是三万,这三万 ...

  7. 森林怎么训练野人_第五人格:野人技能曝光!野猪可以骑,庄园中或将迎来新玩法!...

    欢迎各位小伙伴来到本期的<第五人格不知道多少课>"野人"今天呢~公瑾就和大家来聊一聊<第五人格>中所谓的"野人",近日官方曝光出了我们的 ...

  8. Android之主题(Theme)总结

    在AndroidManifest.xml文件中有<application android:theme="@style/AppTheme">,其中的@style/AppT ...

  9. 冒险王3ol服务器维护中,冒险王3OL公会系统玩法介绍_冒险王3OL该怎样加入公会_好特网...

    公会系统 当玩家等级达到20级时,系统提示"公会"系统开启. 开启公会后,玩家可以选择自己创建公会,也可以选择加入现有的公会.创建公会时需要确定公会会标.公会名称,消耗钻石,即可创 ...

  10. atlas单机模式代码_用代码玩太无聊,这样玩海盗游戏《ATLAS》单机模式才是正确玩法...

    在各大单机游戏中,存在很多的代码给玩家使用,利用这些代码,玩家就能和开了挂似得快速通关.这让不少玩家沉迷于代码的世界而无心享受游戏的乐趣,因此在游戏界中经常有代码毁了一款游戏的说法.这点放在最近才上线 ...

最新文章

  1. ResNets和Inception的理解
  2. 基于 CNN 特征区域进行目标检测
  3. html5仿浏览器,前端H5-仿QQ浏览器for mac之动画效果(一)
  4. 【C 语言】字符串模型 ( strstr-while 模型 | 抽象函数模型 | 业务子函数接口定义要点 | 形参指针间接赋值 | 返回值状态 | 形参指针处理 | 形参指针判空 | 形参返回值 )
  5. 【HDU - 1009 】FatMouse' Trade (贪心)
  6. 基于 SWTBot 进行 Eclipse GUI 自动化测试
  7. 信息学奥赛一本通(1238:一元三次方程求解)
  8. php 转化js数组字符串,js数组怎么转为字符串
  9. 基于JAVA+SpringMVC+MYSQL的ktv预订管理系统
  10. 小程序本地图片偶尔加载不出来_小程序优化的20中策略
  11. 集合框架之ArrayList集合
  12. docker安装redis,使用jedis轻松操作redis
  13. Qt实现判断鼠标左右键信号
  14. FGSM对抗样本trick汇总
  15. Python 3 执行 MIUI 线刷包内 flash_gen_crc_list.py 文件
  16. 云服务平台—恒源智享云
  17. 使用iTunes下载旧版本的IPA文件
  18. 征服英语的33条军规
  19. pip 切换清华镜像源
  20. 使用fiddle处理跨域

热门文章

  1. html5简单幻灯片图片转换,清新简洁的HTML5幻灯片- SLIDESHOW CANVAS JQUERY
  2. html文件默认浏览器改不了,怎么设置默认浏览器 3种更改默认浏览器方法
  3. 在Ogre中实现Mpq文件格式的支持
  4. IDEA2017.2汉化
  5. 获取路由器内的ADSL上网账号和密码或者获取电脑内的ADSL上网账号和密码教程(by 星空武哥)
  6. DeepFool: a simple and accurate method to fool deep neural networks
  7. ARP命令详解和解决ARP攻击
  8. 利用metadata-extractor定向获取图片拍摄时间以及宽高
  9. 项目实操总结:拼团活动的设计
  10. C++字母大小写转换