该文章基于V1.6.9版本
apkplug主题切换有两个层次的切换,这篇文章只讲解通用主题切换层次
一 何为通用主题切换
apkplug通用主题切换可以简单的理解为一套可动态替换的系统主题(由主题包提供)。它是apkplug在系统主题与应用activity主题之间新增的一层主题样式。它们之间有叠加关系
注:系统主题只支持对Button,ListView,Activity背景等已定义的系统控件样式进行切换,普通应用可通过(Activity.setTheme())设置系统或自定义主题。
![](http://static.oschina.net/uploads/img/201405/22112649_wkeZ.png)
二 apkplug通用主题的作用
由以上图示,我们可通过一些设置实现动态替换一些系统控件的样式,Button,背景图片,字体,颜色,大小等。
三 apkplug通用主题方案设置流程
1.主题包按照安卓主题设计流程设计一套主题样式如:
1 | <style name= "AppTheme_Default" parent= "@android:style/Theme.Light" > |
2 | <!--Button样式 --> |
3 | <item name= "android:buttonStyle" > @style /ButtonStyle</item> |
4 | <!--activity 背景 --> |
5 | <item name= "android:windowBackground" > @drawable /rootblock_default_bg</item> |
6 | <!-- 字体颜色 --> |
7 | <item name= "android:textColor" > @color /red</item> |
8 | </style> |
2.通过以下代码将该主题设置为apkplug层主题
1 | OSGIServiceAgent<ThemeControl> agent= new OSGIServiceAgent<ThemeControl>(mcontext,ThemeControl. class .getName()); |
2 | agent.getService().setTheme(mcontext,mcontext.getBundle(), R.style.AppTheme_Another); |
三 apkplug通用主题的局限性
因为主题是叠加的关系,所以apkplug的主题样式很可能无法全部适用到上层的Activity界面中,因为大部分情况下我们会单独对Activity的布局和控件做一些处理。
四 解决方案
因为通用主题的局限性,所以我们又为apkplug设计了一套适用于自定义控件的主题切换方案,通过这套方案开发者可以很简单灵活的定义切换规则且不失灵活性。我们称之为"自定义主题切换"