当从深色模式切换到浅色模式时,activity会销毁重新加载,但往往是从xml文件开始加载,而动态设置的一些值不会保存,同时如果页面足够复杂,被打回到起点是很痛苦的。
对于这一点,可以在AndroidManifest文件中activity标签后设置
configChanges = "uiMode"
可以保证用户在模式切换时不会重启activity。但是模式切换并没有完成。
所以如果还需要切换模式的话,可以考虑重写OnConfigurationChanged()方法。
而我正面临着复杂的单界面多场景切换的情况,中间场景要恢复正确的状态让我很头疼,因为不能轻易切换场景。
private Configuration mConfiguration;
...
@Override
protected void onCreate(Bundle savedInstanceState) {
...
mConfiguration = new Configuration(getResources().getConfiguration());
}
...
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if ((mConfiguration.diff(newConfig) & ActivityInfo.CONFIG_UI_MODE) != 0) {
// you want to do
}
}
老老实实去重新设置状态再刷新一次界面,多么痛的领悟。
不多说了,我先去准备好柴火,好让产品和设计师祭天。