尝试使用片段保存夜间模式状态

Posted

技术标签:

【中文标题】尝试使用片段保存夜间模式状态【英文标题】:Trying to save Night Mode State using Fragment 【发布时间】:2021-11-30 18:19:00 【问题描述】:

我正在尝试在我的应用程序中启用暗夜模式,但当我重新启动应用程序时,它会再次进入光模式,基本上我想保存暗夜模式状态,所以当重新启动应用程序时,它会一直处于暗模式设置为深色模式,而不是浅色模式。我的相关代码如下:

     public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) 
            // Inflate the layout for this fragment
            View view= inflater.inflate(R.layout.fragment_settings, container, false);
            switchCompat= view.findViewById(R.id.switchCompat);
            sharedPreferences = getActivity().getSharedPreferences("night",0);
            Boolean booleanValue= sharedPreferences.getBoolean("night_mode",true);
            if(booleanValue)
                AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
                switchCompat.setChecked(true);
    
            
            switchCompat.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() 
                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) 
                    if(isChecked)
                        AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
                        switchCompat.setChecked(true);
                        SharedPreferences.Editor editor = sharedPreferences.edit();
                        editor.putBoolean("night_mode",true);
                        editor.commit();
                    else
                        AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
                        switchCompat.setChecked(false);
                        SharedPreferences.Editor editor = sharedPreferences.edit();
                        editor.putBoolean("night_mode",false);
                        editor.commit();
    
                    
                
            );
return view;

我也尝试过这个活动,但它没有保存暗模式的状态。

【问题讨论】:

【参考方案1】:

    创建一个名为 Preferences Manager 的类

    将此代码粘贴到类中

?

public final SharedPreferences sharedPreferences;

public PreferenceManager(Context context)
    sharedPreferences=context.getSharedPreferences( "PREFS",Context.MODE_PRIVATE );

public void putBoolean(String key,Boolean value)
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.putBoolean( key,value );
    editor.apply();

public Boolean getBoolean (String key,Boolean defaultValue)
    return sharedPreferences.getBoolean( key,defaultValue );


public void clear()
    SharedPreferences.Editor editor = sharedPreferences.edit();
    editor.clear();
    editor.apply();

    然后在片段中创建一个像这样名为首选项管理器的对象。

    PreferencesManager preferencesManager = new PreferencesManager(getActivity());

    然后像这样为它添加价值

如果夜间模式设置为开启。

preferencesManager.putBoolean("NightMode",true);

如果夜间模式关闭

preferencesManager.putBoolean("NightMode",false);

然后检查夜间模式是打开还是关闭,请使用此代码

if (preferencesManager.getBoolean("NightMode"))
    //night mode is on ,do some magic
else 
    //night mode is off ,do some magic

【讨论】:

以上是关于尝试使用片段保存夜间模式状态的主要内容,如果未能解决你的问题,请参考以下文章

DKNightVersion的基本使用(夜间模式)

优化夜间模式系统

四种爪机夜间模式的实现思路

城市文化区域更新模式助力夜间经济

系统Android 10.0来袭:新增夜间模式,最大赢家是OLED手机用户?

Android 系统APK-闹钟 长按进入夜间模式,松开退出夜间模式