如何在不重新加载fragment的情况下应用夜间模式?

Has*_*ghi 6 android

我在我的 Android 项目中使用了灯光/夜间模式,并使用片段中的开关来更改模式。好吧,当我重新加载应用程序时它会改变。但我想更改模式而不重新加载应用程序。我怎样才能做到这一点???

  • 我想在改变模式时保留当前片段。

    aSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
            if(b){
                AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
                aSwitch.setChecked(true);
                sh = getActivity().getSharedPreferences("darklight",Context.MODE_PRIVATE).edit();
                sh.putBoolean("is",true);
                sh.commit();
            }else{
                AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
                sh = getActivity().getSharedPreferences("darklight",Context.MODE_PRIVATE).edit();
                sh.putBoolean("is",false);
                sh.commit();
            }
        }
    });
    
    Run Code Online (Sandbox Code Playgroud)

ste*_*err 0

让我们在“设置”片段中为夜间模式开关设置一个全局变量。然后,让我们在用户切换夜间模式时设置它:

var nightModeSwitched = false

class SettingsFragment : Fragment() {

    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)

        nightModeButton.setOnClickListener {
            nightModeSwitched = true
            // Additional code to switch night mode on/off
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

您的父/导航活动将在AppCompatDelegate.setDefaultNightMode发生更改后重新加载。然后,当夜间模式已切换时,让我们将用户从导航活动重定向到“设置”片段:

class NavigationActivity : AppCompatActivity() {

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

        if (nightModeSwitched) {
            loadFragment(SettingsFragment())
        }
    }

}
Run Code Online (Sandbox Code Playgroud)