我尝试在主题(亮和暗)之间进行切换。我使用了一个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)
但是它不能正常工作。如果有人有办法,请告诉我
1条答案
按热度按时间hm2xizp91#
如果你只有一个Activity,那么这是可以的,但是如果你有多个Activity,你将需要一个baseActivity来为所有从它实现的Activity设置它。并且你需要在
super.onCreate(savedInstanceState)
之上使用setTheme
方法,如下: