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

Эй, один парень задал аналогичный вопрос раньше, и я отправляю ответ, возможно, вы его проверите: [как-дать-пользователю-возможность-переключаться между разными цветами-скин -in] (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

yah, I хотите предложить им подборщик цветов и сохранить свои предпочтения. – Julia

+0

Для этого вам, к сожалению, нужно будет управлять всем кодом. Таким образом, вам нужно будет установить цвет фона и цвет текста всего в коде на цвет, сохраненный в sharedprefs. Извините, я хотел бы, чтобы был лучший способ. Для одного приложения, над которым я работал, это приложение оболочки для разных клиентов. У меня есть файл config.json, который я читаю со всеми цветами, на основе которых клиент создает приложение. – ClayHerendeen

+0

Я бы предложил писать подклассы для каждого типа View (LinearLayout, EditText, TextView и т. Д.) И настроить цвет в конструкторе, захватив его из sharedpreferences. Затем используйте эти пользовательские классы в ваших файлах макета. Это большая работа, но более эффективная и менее эффективная, чем программное изменение цвета каждого представления внутри каждого фрагмента или действия. – ClayHerendeen

Смежные вопросы