由于android系统Theme的设置必须放在onCreate之前,导致每次切换主题都必须重启Activity(对应用级的Theme切换必须重启整个应用),这样对用户的体验来说是非常糟糕的。经过研究,得到一个折中的方法,谨在此记录之,让大家少点弯路。同时,也欢迎同仁们提出自己的见解,使之更完美。
好了,废话不说,先来看效果图:
“黑色” 主题:
”白色“主题:
系统中定义两个theme:
<style name="Black">
<item name="android:background">@android:color/black</item>
<item name="android:textColor">#e0ff33dd</item>
</style>
<style name="White">
<item name="android:background">#ffffffff</item>
<item name="android:textColor">#e0ff4f00</item>
</style>
开始的时候采取先销毁activity,再启动该activity,发现在有些手机上会有动画效果,后来取巧,采用recreate()函数,完美解决了该问题(注意:系统要求 sdk 11 以上 , 否则就得自己写动画了)。
但是想想,该theme只添加到了该activity,如果再在该应用中启动另外一个activity会是什么效果呢?
果然不出所料,另起的activity,使用的是application的theme 。 肿么办? 继承,看起来不错 ~ _ ~,系统中所有的activity接继承与一个BaseActivity , 它就专门在启动之初设置activity的theme , 这样看起来就跟使用的是application的theme i一样。
当然最完美,理想的就是销毁当前的application,然后再在application级设置主题。有兴趣的可以去试一试......
下面是完整项目地址: