我想通过切换按钮来更改应用程序的主题。没问题,当我按下按钮时,主题变为暗或亮。另一方面,我想随着主题在不同活动中的变化而改变背景图像。我的意思是MainActivity具有图像背景,而其他活动具有自己的背景图像。如果有个人可以帮助我,我将不胜感激。
这是我的代码:
private Switch mySwitch;
@Override
protected void onCreate(Bundle savedInstanceState) {
if(AppCompatDelegate.getDefaultNightMode() ==
AppCompatDelegate.MODE_NIGHT_YES){
setTheme(R.style.darkTheme);
}
else {setTheme(R.style.AppTheme);
}
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mySwitch = (Switch) findViewById(R.id.my_switch);
if(AppCompatDelegate.getDefaultNightMode() ==
AppCompatDelegate.MODE_NIGHT_YES){
mySwitch.setChecked(true);
}else {
}
mySwitch.setOnCheckedChangeListener(new
CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b)
{
if(b){AppCompatDelegate.setDefaultNightMode
(AppCompatDelegate.MODE_NIGHT_YES);
restartApp();
}
else {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
restartApp();
}
}
});
}
public void restartApp(){
Intent i = new Intent(getApplicationContext(), MainActivity.class);
startActivity(i);
finish();
}
}
答案 0 :(得分:0)
将内容保存在sharedPref
private SharedPreferences mSharedPreferences;
public SharedCache(SharedPreferences sharedPreferences) {
mSharedPreferences = sharedPreferences;
}
public String getThemeName() {
return mSharedPreferences.getString(THEME_NAME, APP_DARK);
}
public void setThemeName(@NonNull String theme) {
mSharedPreferences.edit().putString(THEME_NAME, theme).apply();
}
AppDark是我当前的主题名称,您可以在主题更改时设置主题名称。
在Activity onCreate方法中,从sharedPref获取主题。或者,您可以点击以下链接以更好地了解sharedPreference。 https://medium.com/android-grid/android-sharedpreferences-example-writing-and-reading-values-7a677f4448c3