1

我已经为我的应用实施了材质设计,并且我希望用户能够自定义colorPrimary,colorPrimaryDark和colorAccent的颜色。怎么做?如何通过代码动态更改主题

我想要一个设置活动,用户可以选择自己的颜色,并且更改将应用​​于我的所有活动。谢谢。

<style name="MyTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar"> 
    <item name="colorPrimary">@color/colorPrimary</item> 
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
    <item name="colorAccent">@color/colorAccent</item> 
</style> 
+0

嘿,在那里,有一个人问过类似的问题,我发布了一个答案,也许你会检查它:[如何给用户在不同颜色的皮肤之间切换的可能性 - ](http://stackoverflow.com/questions/38349187/how-to-give-the-user-the-possibility-to-switch-between-different-colors-skin-in/38350441) –

回答

0

取决于你是否被允许用户从颜色的静态列表或一个拾色器可以为您节省的颜色选择,他们选择在SharedPreferences,和他们拉背出来的应用程序启动时。不幸的是,这意味着你将不得不通过代码设置所有使用这些颜色的视图的颜色,而不是使用xml,因为主题是不可变的。看看这篇文章:How to _really_ programmatically change primary and accent color in Android Lollipop?你可以在devconsole的答案中采取这种做法; https://stackoverflow.com/a/37905131/3314615

+0

呀,我想给他们一个颜色选择器并存储他们的偏好。 – Julia

+0

要做到这一点,你将不得不管理代码中的所有内容。因此,您必须将代码中的所有内容的背景颜色和文本颜色设置为存储在sharedprefs中的颜色。对不起,我希望有更好的方法。对于我一直在研究的一个应用程序来说,这是一个适用于各种客户端的shell应用程序,我有一个config.json文件,可以根据客户端构建应用程序的所有颜色来阅读。 – ClayHerendeen

+0

我会建议为每种类型的视图(LinearLayout,EditText,TextView等)编写子类,并通过从sharedpreferences中抓取它来在构造函数中设置颜色。然后在布局文件中使用这些自定义类。与编程式地改变每个片段或活动内部的每个视图的颜色相比,这是很多工作,但效率更高,代码更少。 – ClayHerendeen