Kotlin|设置片段|暗模式

b5buobof  于 2022-11-25  发布在  Kotlin
关注(0)|答案(1)|浏览(138)

我尝试在主题(亮和暗)之间进行切换。我使用了一个settingsFragment(继承自PreferenceFragmentCompat())。在那里我有一个lateinit var - activity,用于调用MainActivity中的一个函数,帮助我在暗/亮模式之间进行切换。
问题是:当我更改主题时,MainActivity会更新,主题也会更改,但当我再次切换时,出现活动变量尚未初始化的错误(但我在OnCreate()中初始化它)
设置片段:

class SettingsFragment : PreferenceFragmentCompat() {

    lateinit var **activity**: MainActivity

    override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {

        setPreferencesFromResource(R.xml.root_preferences, rootKey)

        val themePreference : Preference = findPreference("theme")!!
        val fontPreference : Preference = findPreference("font_list")!!
        val langPreference : Preference = findPreference("lang_list")!!

        themePreference.onPreferenceClickListener = Preference.OnPreferenceClickListener {

            activity.setTheme()

            true
        }

    }

}

设置主题():

fun setTheme(){
    val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)
    val isNightMode: Boolean? = sharedPreferences?.getBoolean("theme",false)

    if(isNightMode == true){
        AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
    }
    else {
        AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
    }

}

我尝试使用

this.getTheme().applyStyle(android.R.style.ThemeOverlay_Material_Dark, true);

this.setTheme(android.R.style.ThemeOverlay_Material_Light)

但是它不能正常工作。如果有人有办法,请告诉我

hm2xizp9

hm2xizp91#

如果你只有一个Activity,那么这是可以的,但是如果你有多个Activity,你将需要一个baseActivity来为所有从它实现的Activity设置它。并且你需要在super.onCreate(savedInstanceState)之上使用setTheme方法,如下:

override fun onCreate(savedInstanceState: Bundle?) {
        setTheme()
        super.onCreate(savedInstanceState)

相关问题