首页 > 其他 > 详细

主题 Theme 小结

时间:2017-02-06 17:06:34      阅读:203      评论:0      收藏:0      [点我收藏+]

主题的使用

默认创建的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.Holo,Theme.DeviceDefault, 但是实际上在此基础系统还定义了大量的派生主题,最典型的是对应的Light主题。
除此之外,还有很多


所有能作为应用程序主题的项目的名字都是以"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窗口背景

示例:


解决办法

通过设置设置Style

(1)设置背景图Theme

通过设置一张背景图。 当程序启动时,首先显示这张背景图,避免出现黑屏

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

    <item name="android:screenOrientation">portrait</item>

    <item name="android:windowBackground">@mipmap/splash</item>

    <item name="android:windowIsTranslucent">true</item>

    <item name="android:windowNoTitle">true</item>

</style>

 


(2)设置透明Theme

通过把样式设置为透明,程序启动后不会黑屏而是整个透明了,等到界面初始化完才一次性显示出来

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

    <item name="android:windowNoTitle">true</item>

    <item name="android:windowBackground">@android:color/transparent</item>

    <item name="android:windowIsTranslucent">true</item>

    <item name="android:screenOrientation">portrait</item>

  </style>

两者对比:

Theme1 程序启动快,界面先显示背景图,然后再刷新其他界面控件。给人刷新不同步感觉。

Theme2 给人程序启动慢感觉,界面一次性刷出来,刷新同步。 


主题 Theme 小结

原文:http://www.cnblogs.com/baiqiantao/p/32f9cae9e2b18b9136133e691bda6359.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!