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