我正在尝试制作“卡路里计数器”类型的应用程序,并且进行了主题活动,可以在其中更改应用程序的主题。问题是,当我在“主题活动”中更改主题时,它将把主题更改为所有活动,但主菜单活动或应用程序的“启动器活动”中的状态栏颜色除外。如果我关闭应用程序并再次打开它,状态栏的颜色将会改变。问题是我希望状态栏颜色发生变化,而不必关闭应用程序然后再次打开。
我不知道确切应该发布什么代码,以使您更容易理解我所做的事情,因此,如果您需要其他代码,请告诉我,我将对其进行更新。
这是ThemesActivity,基本上是用户可以更改主题的菜单:
公共类ThemesActivity扩展了AppCompatActivity {
Pref sharedpref;
Button button,button2,button3,button4;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
sharedpref = new Pref(this);
if(sharedpref.loadDarkTheme()){
setTheme(R.style.DarkTheme);
setContentView(R.layout.activity_themes);
}
if(sharedpref.loadAppTheme()){
setTheme(R.style.AppTheme);
setContentView(R.layout.activity_themes);
}
if(sharedpref.loadCandyTheme()){
setTheme(R.style.CandyTheme);
setContentView(R.layout.activity_themes);
}
if(sharedpref.loadIceCreamTheme()){
setTheme(R.style.IceCreamTheme);
setContentView(R.layout.activity_themes);
}
else
setContentView(R.layout.activity_themes);
findViewById(R.id.from_themes_to_menu).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
onBackPressed();
}
});
button = findViewById(R.id.themes_default);
button2 = findViewById(R.id.themes_dark);
button3 = findViewById(R.id.themes_candy);
button4 = findViewById(R.id.themes_icecream);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
sharedpref.setIceCreamTheme(false);
sharedpref.setAppTheme(true);
sharedpref.setDarkTheme(false);
sharedpref.setCandyTheme(false);
setTheme(R.style.AppTheme);
setContentView(R.layout.activity_themes);
restartApp();
}
});
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
sharedpref.setIceCreamTheme(false);
sharedpref.setAppTheme(false);
sharedpref.setDarkTheme(true);
sharedpref.setCandyTheme(false);
setTheme(R.style.DarkTheme);
setContentView(R.layout.activity_themes);
restartApp();
}
});
button3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
sharedpref.setIceCreamTheme(false);
sharedpref.setCandyTheme(true);
sharedpref.setAppTheme(false);
sharedpref.setDarkTheme(false);
setTheme(R.style.CandyTheme);
setContentView(R.layout.activity_themes);
restartApp();
}
});
button4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
sharedpref.setIceCreamTheme(true);
sharedpref.setCandyTheme(false);
sharedpref.setAppTheme(false);
sharedpref.setDarkTheme(false);
setTheme(R.style.IceCreamTheme);
setContentView(R.layout.activity_themes);
restartApp();
}
});
}
public void restartApp(){
Intent i = new Intent(getApplicationContext(),ThemesActivity.class);
startActivity(i);
finish();
}
}
这是我从youtube视频复制的“ Pref”类,以帮助我在关闭应用程序后保存主题:
公共类Pref {
SharedPreferences mySharedPref;
public Pref(Context context) {
mySharedPref = context.getSharedPreferences("filename", Context.MODE_PRIVATE);
}
public void setDarkTheme(Boolean state) {
SharedPreferences.Editor editor = mySharedPref.edit();
editor.putBoolean("DarkTheme", state);
editor.commit();
}
public void setAppTheme(Boolean state){
SharedPreferences.Editor editor = mySharedPref.edit();
editor.putBoolean("AppTheme", state);
editor.commit();
}
public void setCandyTheme(Boolean state){
SharedPreferences.Editor editor = mySharedPref.edit();
editor.putBoolean("CandyTheme", state);
editor.commit();
}
public void setIceCreamTheme(Boolean state){
SharedPreferences.Editor editor = mySharedPref.edit();
editor.putBoolean("IceCreamTheme", state);
editor.commit();
}
public Boolean loadDarkTheme() {
Boolean state = mySharedPref.getBoolean("DarkTheme", false);
return state;
}
public Boolean loadAppTheme() {
Boolean state = mySharedPref.getBoolean("AppTheme", true);
return state;
}
public Boolean loadCandyTheme() {
Boolean state = mySharedPref.getBoolean("CandyTheme", false);
return state;
}
public Boolean loadIceCreamTheme() {
Boolean state = mySharedPref.getBoolean("IceCreamTheme", false);
return state;
}
}
这是MyMenuActivity,它是启动器活动,如果我不重新启动应用程序,它不会更改其状态栏颜色:
公共类MyMenuActivity扩展了AppCompatActivity { 公共静态布尔值isOpen = false;
Pref sharedpref;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MyMenuActivity.isOpen = true;
sharedpref = new Pref(this);
if(sharedpref.loadAppTheme()){
setTheme(R.style.AppTheme);
setContentView(R.layout.activity_my_menu);
}
else if(sharedpref.loadDarkTheme()){
setTheme(R.style.DarkTheme);
setContentView(R.layout.activity_my_menu);
}
else if(sharedpref.loadCandyTheme()){
setTheme(R.style.CandyTheme);
setContentView(R.layout.activity_my_menu);
}
if(sharedpref.loadIceCreamTheme()){
setTheme(R.style.IceCreamTheme);
setContentView(R.layout.activity_my_menu);
}
else
setContentView(R.layout.activity_my_menu);
findViewById(R.id.from_menu_to_diary).setOnClickListener(new ToWindowOnClick(this, DiaryActivity.class));
findViewById(R.id.from_menu_to_diary_menu).setOnClickListener(new ToWindowOnClick(this, DiaryActivity.class));
findViewById(R.id.from_menu_to_profile).setOnClickListener(new ToWindowOnClick(this, ProfileActivity.class));
findViewById(R.id.from_menu_to_dishes).setOnClickListener(new ToWindowOnClick(this, DishActivity.class));
findViewById(R.id.help).setOnClickListener(new ToWindowOnClick(this, HelpActivity.class));
findViewById(R.id.themes).setOnClickListener(new ToWindowOnClick(this, ThemesActivity.class));
}
public void onExitButton(final View view) {
isOpen = false;
finish();
}
@Override
protected void onDestroy() {
super.onDestroy();
isOpen = false;
finish();
}
@Override
protected void onResume() {
super.onResume();
MyMenuActivity.isOpen = true;
sharedpref = new Pref(this);
if(sharedpref.loadAppTheme()){
setTheme(R.style.AppTheme);
setContentView(R.layout.activity_my_menu);
}
else if(sharedpref.loadDarkTheme()){
setTheme(R.style.DarkTheme);
setContentView(R.layout.activity_my_menu);
}
else if(sharedpref.loadCandyTheme()){
setTheme(R.style.CandyTheme);
setContentView(R.layout.activity_my_menu);
}
if(sharedpref.loadIceCreamTheme()){
setTheme(R.style.IceCreamTheme);
setContentView(R.layout.activity_my_menu);
}
else
setContentView(R.layout.activity_my_menu);
findViewById(R.id.from_menu_to_diary).setOnClickListener(new ToWindowOnClick(this, DiaryActivity.class));
findViewById(R.id.from_menu_to_diary_menu).setOnClickListener(new ToWindowOnClick(this, DiaryActivity.class));
findViewById(R.id.from_menu_to_profile).setOnClickListener(new ToWindowOnClick(this, ProfileActivity.class));
findViewById(R.id.from_menu_to_dishes).setOnClickListener(new ToWindowOnClick(this, DishActivity.class));
findViewById(R.id.help).setOnClickListener(new ToWindowOnClick(this, HelpActivity.class));
findViewById(R.id.themes).setOnClickListener(new ToWindowOnClick(this, ThemesActivity.class));
}
}
如果有帮助,MyMenuActivity不会更改任何颜色,除非重新启动,直到我将onCreate()代码复制到onResume()中为止。我试图了解一项活动的生命周期,但仍然没有设法解决此问题。