主题 Theme 小结
主题的使用
默认创建的Android工程中,在AndroidManifest.xml文件中有<application android:theme="@style/AppTheme">,其中的@style/AppTheme是引用的 res/values/styles.xml 或者 res/values-v21/styles.xml 中的主题样式,这是根据运行此程序的手机系统来决定的,如果手机系统的API版本是21以上就是v21/styles.xml,以此类推。在values/styles.xml中你会发现,AppTheme的主题样式又是继承自AppBaseTheme,而AppBaseTheme的父主题就各有不同了,你可以从这个位置来自己修改主题。
主题的来源有三个:
- 1) 来自Android系统自带的,使用系统自带的主题要加上"android:"前缀,如:android:Theme.Black或@android:style/Theme.Black
- 2) 来自兼容包的(比如v7兼容包),使用兼容包中的主题不需要前缀,如:Theme.AppCompat或@style/Theme.AppCompat
- 3) 你自己写一个主题,不需要前缀
系统自带的主题
所有能作为应用程序主题的项目的名字都是以"Theme."开头的,不是以"Theme."开头的就不是应用程序主题,而是用于某些局部控件。
比如"ThemeOverlay"主题可用于 Toolbar 控件,"TextAppearance"主题可用于设置文字外观。
在v7中有很多以"Base"开头的主题,是一些父主题,不建议直接使用。
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(继承自Holo主题):
- Theme.DeviceDefault 设备默认根主题
- Theme.DeviceDefault.Black 设备默认黑主题
- Theme.DeviceDefault.Light 设备默认白主题
API 21(Material Design风格主题):
- Theme.Material Material根主题
- Theme.Material.Light Material白主题
兼容包中的主题
兼容主题意思就是,说如果运行程序的手机API是21则就相当于是Material主题,如果运行程序的手机API是11则就相当于是Holo主题,以此类推。
兼容包v7会被Google不断升级,比如 appcompat-v7-21.0 表示升级到向 API 21 兼容,appcompat-v7-23.2 表示升级到向 API 23 兼容。
兼容包v7中带的兼容主题有:
- Theme.AppCompat 兼容主题的根主题
- Theme.AppCompat.Black 兼容主题的黑色主题
- Theme.AppCompat.Light 兼容主题的白色主题
在AS项目的 External Libraries 中可以查看v7包的版本号

而在eclipse中只能看到 appcompat_v7,后面没有跟API的版本号,那么如何识别呢?
可以在展开appcompat_v7库中的res文件夹,查看有没有values-21、values-23这样的文件夹,最大数字就是API版本号了。
所以同样是v7兼容包,会有API版本号不同的区别,要注意。
更多主题风格设置
以下都是指"包含",比如包含"Dialog"表示对话框风格
比如Theme.Dialog、Theme.Holo.Dialog、Theme.Material.Dialog、Theme.AppCompat.Dialog都是对话框风格
具体有没有这种组合,你就在"自动提示"中来看就可以,提示有就有,没有就没有。
- Black 黑色风格
- Light 白色风格
- Dark 黑暗风格
- DayNight 白昼风格
- Wallpaper 用系统桌面为应用程序背景
- Translucent 透明背景
- Panel 平板风格
- Dialog 对话框风格
- NoTitleBar 没有标题栏
- NoActionBar 没有ActionBar
- Fullscreen 全屏
- MinWidth 对话框或者ActionBar的宽度根据内容变化,而不是充满全屏
- WhenLarge 对话框充满全屏
- TranslucentDecor 半透明风格
- NoDisplay 不显示,也就是隐藏了
- WithActionBar 在旧版主题上显示ActionBar
很多主题在使用时会报错,原因有很多,比如窗体必须继承AppCompactActivity,或者要继承ActionBarActiivty,或者要继承FragmentActivity,或者需要手动指定宽高,或者需要提升最低API版本,或者需要更高版本的SDK,或者兼容包版本不对等原因。
解决应用启动时的黑屏、白屏问题
产生原因
其实显示黑屏或者白屏实属正常,这是因为还没加载到布局文件,就已经显示了window窗口背景,黑屏白屏就是window窗口背景。
启动页Activity
}
启动页布局
注意,在不同情况下可能需要使用合适的scaleType属性和背景色
</LinearLayout>
自定义样式
</resources>
自定义layer-list
</layer-list>
主题 Theme 小结的更多相关文章
- 总结一下Android中主题(Theme)的正确玩法
在AndroidManifest.xml文件中有<application android:theme="@style/AppTheme">,其中的@style/AppT ...
- Struts2的模板和主题theme及自定义theme的使用
Struts2的模板和主题theme及自定义theme 标签: struts2 2016-03-29 11:22 190人阅读 评论(0) 收藏 举报 分类: javaweb(8) Struts2 ...
- 第十四章:样式(Style)和主题(Theme)
简介 Android的样式(Style)和主题(Theme)文件就好比WEB开发中的CSS一样,可以实现UI界面的风格统一管理,这和Windows平台的XAML格式(Silverlight.WPF)类 ...
- 【转载】总结一下Android中主题(Theme)的正确玩法
http://www.cnblogs.com/zhouyou96/p/5323138.html 总结一下Android中主题(Theme)的正确玩法 在AndroidManifest.xml文件中有& ...
- Android菜鸟的成长笔记(6)——剖析源码学自定义主题Theme
原文:Android菜鸟的成长笔记(6)--剖析源码学自定义主题Theme 还记得在Android菜鸟的成长笔记(3)中我们曾经遇到了一个问题吗?"这个界面和真真的QQ界面还有点不同的就是上 ...
- Android 主题theme说明 摘记
主题Theme就是用来设置界面UI风格,可以设置整个应用或者某个活动Activity的界面风格.在Android SDK中内置了下面的Theme,可以按标题栏Title Bar和状态栏Status B ...
- Android下Notification,样式style,主题theme的功能实现
一:Notification 1.NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVIC ...
- struts2官方 中文教程 系列十四:主题Theme
介绍 当您使用一个Struts 2标签时,例如 <s:select ..../> 在您的web页面中,Struts 2框架会生成HTML,它会显示外观并控制select控件的布局.样式和 ...
- eclipse 切换主题Theme
eclipse切换主题theme 1. 打开help -> eclipse marketplace,搜索theme 2. 点击右侧安装后一直继续,直到安装完成 3. 安装完成后会重启eclips ...
随机推荐
- Java反序列化漏洞之殇
ref:https://xz.aliyun.com/t/2043 小结: 3.2.2版本之前的Apache-CommonsCollections存在该漏洞(不只该包)1.漏洞触发场景 在java编写的 ...
- SSM相关资料
MyBatis: 官方文档 MyBatis-Spring:官方文档 SpringMVC整合MyBatis实例 SSM框架详细整合教程 一步一步带你搭建后台管理系统之SSM框架整合 SSM框架入门和搭建 ...
- Django+Nginx+uwsgi搭建自己的博客(八)
在这篇博客中,我们开始为我们的博客开发Blogs App和Users App相关的管理功能,以便每个用户都能管理自己的博客以及评论.目前,Users App的管理功能相对简单,主要功能为查看用户资料以 ...
- Java常用工具类之MD5加密
package com.wazn.learn.util; import java.security.MessageDigest; /** * MD5加密工具类 * <功能详细描述> * * ...
- Git in Powershell saying 'Could not find ssh-agent'
加入系统环境变量D:\Program Files\Git\usr\bin
- 【BZOJ 4031】 4031: [HEOI2015]小Z的房间 (Matrix-Tree Theorem)
4031: [HEOI2015]小Z的房间 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1089 Solved: 533 Description ...
- 【BZOJ 2054】 2054: 疯狂的馒头 (并查集特技)
Input 第一行四个正整数N,M,p,q Output 一共输出N行,第i行表示第i个馒头的最终颜色(如果最终颜色是白色就输出0). Sample Input 4 3 2 4 Sample Outp ...
- 51nod1423 最大二"货" 单调栈
枚举每个点作为次大值,用单调栈处理出左边 / 右边第一个比它大的数,直接回答 复杂度$O(n)$ #include <cstdio> #include <cstring> #i ...
- [NOIP2017]列队(线段树/裂点splay)
考虑n=1的做法,就是支持: 1.在线删一个数 2.在结尾加一个数 3.查询序列的第y个数 用线段树记录区间内被删元素的个数,可以通过线段树上二分快速得解,对于新增的数,用vector记录即可. 对于 ...
- 【最小割】BZOJ2039- [2009国家集训队]employ人员雇佣
[题目大意] 给定n个人,每个人有一个佣金,i和j如果同时被雇佣会产生2*E(i,j)的效益,i和j如果一个被雇佣一个不被雇佣会产生E(i,j)的亏损,求最大收益. [思路] 如果没有亏损,其实非常类 ...