使用首选项更改主题后,将 recreate() 放在哪里?
Where do I put recreate() after changing a theme using preferences?
我一直在尝试为我的应用程序添加深色模式,并且主要使用此网站 (Tutorial) 来了解如何实现它。在我重新启动应用程序之前,除了主题之外的一切都不会改变。经过一些研究,我发现 recreate() 是解决这个问题的正确方法,但我不知道在哪里实施它。
目前我在主 activity 中的 oncreate 方法看起来像:
PreferenceManager.setDefaultValues(this, R.xml.settings_pref, false);
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
Boolean contrastPref = sharedPref.getBoolean (Navigation.KEY_PREF_CONTRAST_SWITCH, false);
setTheme(contrastPref? R.style.AppTheme_Dark : R.style.AppTheme);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_navigation);........
在 oncreate 方法下面有了这个
public static final String
KEY_PREF_CONTRAST_SWITCH = "contrast_switch";
包含首选项开关的片段如下所示:
public class SettingsFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.settings_pref, rootKey);
}}
感谢您的帮助:)
如果您要从 SettingFragment
更改主题,请从 SettingFragment
调用 getActivity().recreate()
。
我一直在尝试为我的应用程序添加深色模式,并且主要使用此网站 (Tutorial) 来了解如何实现它。在我重新启动应用程序之前,除了主题之外的一切都不会改变。经过一些研究,我发现 recreate() 是解决这个问题的正确方法,但我不知道在哪里实施它。
目前我在主 activity 中的 oncreate 方法看起来像:
PreferenceManager.setDefaultValues(this, R.xml.settings_pref, false);
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
Boolean contrastPref = sharedPref.getBoolean (Navigation.KEY_PREF_CONTRAST_SWITCH, false);
setTheme(contrastPref? R.style.AppTheme_Dark : R.style.AppTheme);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_navigation);........
在 oncreate 方法下面有了这个
public static final String
KEY_PREF_CONTRAST_SWITCH = "contrast_switch";
包含首选项开关的片段如下所示:
public class SettingsFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
setPreferencesFromResource(R.xml.settings_pref, rootKey);
}}
感谢您的帮助:)
如果您要从 SettingFragment
更改主题,请从 SettingFragment
调用 getActivity().recreate()
。