我在我的 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)让我们在“设置”片段中为夜间模式开关设置一个全局变量。然后,让我们在用户切换夜间模式时设置它:
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)
| 归档时间: |
|
| 查看次数: |
4100 次 |
| 最近记录: |