Реализуйте настройку цвета - PullRequest
0 голосов
/ 20 ноября 2018

В моем приложении у меня есть экран настроек, который позволяет вам изменить некоторые цвета приложения.Я определил 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, и мне снова нужно перекрасить все представления.

Есть ли способ сделать это?Я обеспокоен повторяющимися проблемами с кодом и производительностью.Какой должен быть лучший подход для этого?

1 Ответ

0 голосов
/ 20 ноября 2018

Вы можете создать BaseActivity , расширить каждое действие из этого класса и поместить setSettings функцию в BaseActivity .Таким образом, вы будете писать setSettings только один раз

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...