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



>我已经将要在应用程序中使用的各种颜色定义为资源例如。

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

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

感谢您的帮助。

据我所知,资源是在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  */
}

}

Kelevandos 的答案是一个很大的帮助,但由于它没有给出明确的是或否,并且该建议仍然有很多工作要做,所以我想我会投票给他,但自己添加更多而不是接受它作为答案。

答案是..不。无法重新定义资源。

最后,我创建了一个类,将用户的颜色保存在共享首选项中,然后具有针对每种不同视图类型更改颜色/重绘可绘制对象等的方法。然后,我在每个活动中都有一个设置的颜色函数,该函数将该活动的视图提供给将更改它们的方法。

最新更新