第一种是通过直接获取值直接设置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的声明在:
<sdk_path>\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进行主题的切换
网友评论