Android主题设置和切换

第一种是通过直接获取值直接设置MyApplication的值

第二种是通过继承Resources类,重写getColor,getDrawble等其他方法,起到中间者的作用,将需要处理的处理完后返回处理的结果,其他的交给父类方法处理

第三种替换主题的方式,这种是通过在setContentView 之前setTheme,然后通过属性的?demoColor获取主题对应的值

第一种比较渣,第二,第三种参考
http://stackoverflow.com/questions/33987678/programmatically-change-the-value-of-a-color-resource-obtained-from-api-response#

例子地址,写得比较渣,仅供参考
https://gitee.com/fred_kang/ChangeStyleDemo

当中遇到一个问题,getDrawable不仅需要调用父类的方法,而且一定要用传主题的那个,不然会导致栈溢出
原因

还有关于?和@*
http://www.cnblogs.com/greatverve/archive/2011/12/27/Android-xml.html

**二.@*代表引用系统的非public资源。格式:@*android:type/name**
**  **系统资源定义分public和非public。public的声明在:
  \platforms\android-8\data\res\values\public.xml
  **@*android:type/name:**可以调用系统定义的所有资源
**  @android:type/name:**只能够调用publi属性的资源。
  注意:没在public.xml中声明的资源是google不推荐使用的。
**三.?代表引用主题属性**
  另外一种资源值允许你引用当前主题中的属性的值。这个属性值只能在style资源和XML属性中使用;它允许你通过将它们改变为当前主题提供的标准变化来改变UI元素的外观,而不是提供具体的值。例如:
  android:textColor="?android:textDisabledColor" 

还有一种看起来比较复杂的可以使用于webview的,主要是需要遍历所有的view进行主题的切换

http://mp.weixin.qq.com/s?__biz=MzAxMTI4MTkwNQ==&mid=2650820786&idx=1&sn=692caf3110d2793a1c725706d8141edf&scene=1&srcid=0902EIdEFbyjMAMoNY3Ik3EN#wechat_redirect

你可能感兴趣的:(Android主题设置和切换)