实施颜色设置

时间:2018-11-20 16:32:21

标签: android kotlin colors sharedpreferences

在我的应用程序中,我有一个设置屏幕,可让您更改应用程序的某些颜色。我已经在我的色彩资源文件中定义了colorPrimary和colorPrimaryDark,并且我知道在构建完成之后,无法更改这些值。

所以我这样做的方法是在SharedPreferences中保存颜色Integer:

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 :(得分:1)

您可以创建 BaseActivity 扩展此类中的每个活动,并将 setSettings 函数放置在 BaseActivity 中。这样,您只需编写一次 setSettings