我已将我想在我的应用中使用的各种颜色定义为资源 例如
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="hedder_color">#FFFFFF</color>
<color name="text_color">#7A7A7A</color>
<color name="background">#0044AA</color>
</resources>
然后我在整个应用程序中使用它们。
但是......我需要做到这一点,以便用户可以动态更改这些颜色。所以问题是,有没有办法以编程方式改变这些颜色?因此,例如,用户选择新的背景颜色,我的代码重新定义
<color name="background">#0044AA</color>
作为这种新颜色。在将来使用该应用程序时,背景颜色现在是用户选择的新颜色。
感谢您的帮助。
答案 0 :(得分:1)
据我所知,资源是在apk编译上静态加载的,无法更改。请考虑为其创建一个单独的类,它将保存背景颜色信息。
public static class BackgroundColorHolder{
private int backgroundColor;
public BackgroundColorHolder(Context context){
/* Obtain the basic color from resources */
backgroundColor = context.getResources().getColor(R.color.background);
}
public int getCurrentBackgroundColor(){
return backgroundColor;
}
public void changeBackgroundColor(int newColor){
backgroundColor = newColor;
/* Some kind of notification for all of the affected views */
}
}
答案 1 :(得分:0)
Kelevandos的答案是一个很大的帮助,但因为它没有给出明确的是或否,这个建议仍然需要做很多工作,所以我想我会投票给他但是增加一些我自己而不是接受它就是答案。
答案是......不能。资源无法重新定义。
最后,我创建了一个在共享首选项中保存用户颜色的类,然后为每种不同的视图类型提供了更改颜色/重绘drawable等的方法。然后我在每个活动中设置了一个颜色函数,它将该活动的视图提供给可以改变它们的方法。