以编程方式更改主题颜色

时间:2014-09-03 12:32:18

标签: android colors themes

我的应用中有这个活动,允许用户从颜色选择器中选择颜色:

我在SharedPreferences中保存自定义颜色。我现在想要实现的是将这些颜色设置为ActionBar,TextViews,Buttons和其他小部件。

我已经搜索了很多,但无法找到以编程方式编辑主题的方法。

关于如何实现这一目标的任何想法,如果没有,当然,疯狂地将背景颜色设置为喜欢我应用中的每个小部件?

编辑:

这就是我尝试做的原因: 让我们说如果用户不喜欢设置默认应用主题(橙色动作条,橙色标题,黑色文字,橙色和灰色按钮等)的颜色,那么他会使用此功能允许他改变主题颜色主题。例如,他只想将按钮设为蓝色,或者将EditText设置为黄色背景。我试图创建一个允许用户编辑应用主题的功能。

这是我尝试过的: 我发现this library会更改EndScroll突出显示的颜色。我以为我可以使用这些想法来实现上述内容,然后为我在我的应用程序中使用的小部件创建基类。

1 个答案:

答案 0 :(得分:0)

是的,可以动态更改视图背景颜色。 如果视图应用了渐变而不是使用:

GradientDrawable sd = (GradientDrawable) (view.getCompoundDrawables())[0];
                    sd.setColor(Color.red);
                    sd.invalidateSelf();

或用于LayerDrawable

LayerDrawable layer = (LayerDrawable)(view.getBackground());
int randomColor = Color.rgb(redRandom.nextInt(255),greenRandom.nextInt(255),blueRandom.nextInt(255));                   
GradientDrawable sd = (GradientDrawable) (layer.findDrawableByLayerId(R.id.tab_package_shape));
sd.setStroke(0, randomColor);
sd.setColor(randomColor);
sd.invalidateSelf();

希望它能帮到你并提供进一步的方法。