以编程方式重新定义android资源颜色

时间:2014-12-18 09:20:49

标签: android colors resources

我已将我想在我的应用中使用的各种颜色定义为资源 例如

<?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>

作为这种新颜色。在将来使用该应用程序时,背景颜色现在是用户选择的新颜色。

感谢您的帮助。

2 个答案:

答案 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等的方法。然后我在每个活动中设置了一个颜色函数,它将该活动的视图提供给可以改变它们的方法。