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

时间:2019-12-05 08:52:17

标签: android

我在我的android项目中使用了light / night模式,并且在片段中使用了一个开关来更改模式。好吧,当我重新加载应用程序时,它会改变。但我想在不重新加载应用程序的情况下更改模式。我该怎么办??

  • 更改模式后,我想保留当前片段。

    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();
            }
        }
    });
    

2 个答案:

答案 0 :(得分:1)

您可以通过在Android中使用 AppCompatDelegate 命令轻松地做到这一点

将其设置为False

AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)

设置为True

AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)

此外,您还可以使用切换按钮来进行模式修改和切换。

答案 1 :(得分:0)

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

composer require laravel/ui "^1.0" --dev

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

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
        }
    }

}