我发现了很多与此相关的问题,但是我的问题有些不同。
在SettingActivity中,我通过以下代码启用/禁用夜间模式:
ApplicationClass.setNightMode();
ApplicationClass.setDayMode();
用应用程序类编写的精算代码。
但是当我从SettingActivity返回MainActivity时,由于onCreate()方法未调用,颜色不会更改布局。
启用/禁用夜间模式后,如何从SettingActivity重新创建MainActivity。
启用和禁用夜间模式的应用程序代码:
public static void setNightMode(){
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
}
public static void setDayMode(){
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
}
答案 0 :(得分:1)
您的AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
应该在应用程序级别。而且,当您回退或前进应用之间的任何活动时,这将不是问题。不要忘记将其注册到清单。
示例:
public class TestApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
//give a start value AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
}
public static void setNightMode(){
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
}
public static void setDayModeOrSth(){
//AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
}
}
在清单文件中:
<application
android:name="package.name.TestApplication"
比起您的主动性/片段
Testapplication.setDayModeOrSth();
或
Testapplication.setNightMode();
请原谅我的愚蠢命名和示例:)但这将是这样。祝好运。
答案 1 :(得分:0)
如果重新创建MainActivity,将会丢失其当前状态,因此您可以尝试覆盖onResume并检查是否需要启用/禁用夜间模式:
public class MainAcitivy extends ... {
.....
@Override
public void onResume(){
super.onResume();
if(nightModeOn) {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
}
}
另一种解决方案是通过覆盖SettingActivity中的onBackPressed来启动新的MainActivity并启动MainActivity:
public class SettingsActivity extends .. {
.....
@Override
public void onBackPressed() {
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
finishAffinity();
}
}
答案 2 :(得分:0)
您可以覆盖活动的onConfigurationChanged方法。
public abstract void onConfigurationChanged (Configuration newConfig)