以编程方式重新定义android资源颜色
我已经定义了我想在我的应用程序中作为资源使用的各种颜色 例如以编程方式重新定义android资源颜色,android,colors,resources,Android,Colors,Resources,我已经定义了我想在我的应用程序中作为资源使用的各种颜色 例如 #FFFFFF #7A7A #0044AA 然后我在整个应用程序中使用它们 但是。。。我需要这样做,以便用户可以改变这些颜色的飞行。所以问题是,有没有办法通过编程改变这些颜色?例如,用户选择新的背景色,我的代码重新定义 <color name="background">#0044AA</color> #0044AA 就像这种新颜色一样。在应用程序的所有未来使用中,背景色现在是用户选择的新颜色 谢谢您的帮
#FFFFFF
#7A7A
#0044AA
然后我在整个应用程序中使用它们
但是。。。我需要这样做,以便用户可以改变这些颜色的飞行。所以问题是,有没有办法通过编程改变这些颜色?例如,用户选择新的背景色,我的代码重新定义
<color name="background">#0044AA</color>
#0044AA
就像这种新颜色一样。在应用程序的所有未来使用中,背景色现在是用户选择的新颜色
谢谢您的帮助。据我所知,资源是在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的答案是一个很大的帮助,但因为它没有给出一个明确的肯定或否定,而且这个建议还有很多工作要做,所以我想我应该投票给他,但我自己再加上一些,而不是接受它作为答案 答案是。。不可以。无法重新定义资源
最后,我创建了一个类,该类将用户的颜色保存在共享首选项中,然后为每个不同的视图类型提供了更改颜色/重画可绘制内容等方法。然后,我在每个活动中都有一个设置颜色的函数,它将该活动的视图提供给改变它们的方法。不,这是不可能的。这看起来是个好主意,尽管比我希望的要复杂一点!谢谢
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 */
}