В моем приложении у меня есть экран настроек, который позволяет вам изменить некоторые цвета приложения.Я определил colorPrimary и colorPrimaryDark в моем файле цветовых ресурсов, и я знаю, что после завершения сборки эти значения невозможно изменить.
Таким образом, я делаю это, сохраняя цвет Integerв SharedPreferences:
private val preferences = context.getSharedPreferences("my.package.name", Context.MODE_PRIVATE)
var primaryColor: Int
get() = preferences.getInt("KEY_PRIMARY_COLOR", ContextCompat.getColor(context, R.color.color_primary))
set(color) {
val editor = preferences.edit()
editor.putInt("KEY_PRIMARY_COLOR", color)
editor.apply()
}
И когда пользователь запускает каждое действие, запустите метод, чтобы получить цвет настроек и изменить цвет представлений:
class MainActivity : FragmentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.main_activity)
setSettings()
}
private fun setSettings() {
val settings = Settings(this)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) window.statusBarColor = settings.secondaryColor
toolbar_layout.setBackgroundColor(settings.primaryColor)
add_button.backgroundTintList = ColorStateList.valueOf(settings.primaryColor)
add_button.rippleColor = settings.secondaryColor
//...
}
}
Моя проблема заключается в том, что выполнениекак это, я должен повторить много кода для всех видов деятельности.Также при запуске setContentView действия запускаются цветом «по умолчанию», и сразу после этого я запускаю setSettings, и мне снова нужно перекрасить все представления.
Есть ли способ сделать это?Я обеспокоен повторяющимися проблемами с кодом и производительностью.Какой должен быть лучший подход для этого?