Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 实现颜色设置_Android_Kotlin_Colors_Sharedpreferences - Fatal编程技术网

Android 实现颜色设置

Android 实现颜色设置,android,kotlin,colors,sharedpreferences,Android,Kotlin,Colors,Sharedpreferences,在我的应用程序中,我有一个设置屏幕,可以让您更改应用程序的一些颜色。我已经在我的颜色资源文件中定义了colorPrimary和colorPrimaryDark,我知道在构建完成后,不可能更改这些值 因此,我的做法是将颜色整数保存在SharedReferences中: private val preferences = context.getSharedPreferences("my.package.name", Context.MODE_PRIVATE) var primaryColor: I

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

因此,我的做法是将颜色整数保存在SharedReferences中:

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,并再次为所有视图重新着色


有没有办法做到这一点?我关心重复的代码和性能问题。执行此操作的最佳方法是什么?

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

我理解您的说法,问题是,尽管所有活动都有一些相同的视图,比如工具栏布局,它出现在所有活动上,但其中一些有不同的视图,比如添加按钮只出现在某些活动上。如果是这样的话,这会起作用吗?为了获得颜色设置,您可以在BaseActivity和fr设置视图中添加该函数,仅针对您必须通过添加新函数来管理的那些活动