当前位置: 首页 > 知识库问答 >
问题:

如何在SharedPreferences中保存应用程序的主题?

胡高朗
2023-03-14
public class Utils {
private  static int sTheme;
public final static int THEME_DARK = 1;
public final static  int THEME_LIGHT = 0;
//Set the theme of the Activity and restart the activity
public static void changeToTheme(Activity activity, int theme) {
    sTheme = theme;
    activity.finish();
    activity.startActivity(new Intent(activity, activity.getClass()).addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION));
    activity.overridePendingTransition(0,0);
}
//Set the theme of the activity according to the configuration
public static void onActivityCreateSetTheme(Activity activity) {
    switch (sTheme) {
        default:
        case THEME_LIGHT:
            activity.setTheme(R.style.AimBet_Light);
            break;
        case THEME_DARK:
            activity.setTheme(R.style.AimBet_Dark);
            break;
    }
}
SwitchMaterial themeSwitch;

SharedPreferences myPrefs;
SharedPreferences.Editor myEditor;

private static final String MY_PREFS = "switchPrefs";

private static final String DARK_MODE_SWITCH_STATUS = "switchStatus";

boolean dark_mode_switch_status;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Utils.onActivityCreateSetTheme(this);
    
    setContentView(R.layout.activity_main);

    navigationView.getMenu().findItem(R.id.nav_theme).setActionView(new SwitchMaterial(this));

    themeSwitch = (SwitchMaterial) navigationView.getMenu().findItem(R.id.nav_theme).getActionView();

    myPrefs = getSharedPreferences(MY_PREFS, MODE_PRIVATE);
    myEditor = myPrefs.edit();

    dark_mode_switch_status = myPrefs.getBoolean(DARK_MODE_SWITCH_STATUS, false); //false is the default value

    themeSwitch.setChecked(dark_mode_switch_status);

    themeSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (themeSwitch.isChecked()) {
                Utils.changeToTheme(MainActivity.this, Utils.THEME_DARK);
                myEditor.putBoolean(DARK_MODE_SWITCH_STATUS, true);
                myEditor.apply();
            } else {
                Utils.changeToTheme(MainActivity.this, Utils.THEME_LIGHT);
                myEditor.putBoolean(DARK_MODE_SWITCH_STATUS, false);
                myEditor.apply();
            }
        }
    });

}

共有1个答案

谭研
2023-03-14

首先,在切换时将数据保存到设备中。

myEditor.putBoolean(DARK_MODE_SWITCH_STATUS, isChecked)
myEditor.apply()

然后,在onCreate()

if(myPrefs.getBoolean(DARK_MODE_SWITCH_STATUS)){
    Utils.changeToTheme(MainActivity.this, Utils.THEME_DARK);
} else {
    Utils.changeToTheme(MainActivity.this, Utils.THEME_LIGHT);
}

这真的应该管用。如果还有问题请告诉我!:)

 类似资料:
  • 我最近编写了一个Android应用程序。这只是一个简单的应用程序,让你保持几个简单的计数器间隔的篮球比赛得分。我得到了增加一个保存功能的需求,这样你就可以保存你的分数,然后加载他们回来。目前,当您停止应用程序时,您的数据将丢失。所以我想知道的是我必须添加什么才能让应用程序保存标签(分数),然后加载它。谢谢,伙计们,对不起,我对这些东西不太了解。

  • 问题内容: 我目前正在使用Swift开发的iOS应用程序,需要在设备上存储一些用户创建的内容,但似乎找不到一种简单快捷的方法来在设备上存储/接收用户内容。 有人可以解释如何存储和访问本地存储吗? 想法是在用户执行操作时存储数据,并在应用程序启动时接收数据。 问题答案: 如果仅存储两个字符串,最简单的解决方案是,在Swift 3中,该类已重命名为just 。 最好将密钥存储在全局位置,以便您可以在代

  • 我已经创建了一个布尔列表: } 任何建议都会很好,非常感谢!如果我可以从开关上的值字段中重建数据,但我没有看到任何答案...

  • 问题内容: 我有一个带有简单复选框的应用程序,当用户按下该复选框时,会在build.prop中添加一行,这是可行的,但是当我退出该应用程序时,该复选框已重置,有没有一种方法可以通过在其中添加示例代码来防止这种情况您的帖子,因为我仍然是Android应用程序的新手。 MainActivity.java activity_main.xml 问题答案: 使用getRuntime()。exec()在哪里得

  • 如何在应用程序关闭后保存arraylist。这是我的环球班 这是我的旅行班 我想保存数组列表,当我关闭和打开应用程序的数组列表(所有旅行)被保存。如何做到这一点? 我想使用共享首选项,但我不知道如何做到这一点,因为它不是带有Trip的字符串it数组列表。有人能帮我在共享首选项中保存arraylist吗?

  • 我是Java的新学习者,目前很难理解库和main的概念。我试图将用户的输入存储在特定的库中,即Store,而不添加“静态”。我的逻辑错了吗?这是我的代码 这是我的库代码