Android:当我更改应用主题时,状态栏颜色不会更改

时间:2020-04-10 18:04:37

标签: android

我正在尝试制作“卡路里计数器”类型的应用程序,并且进行了主题活动,可以在其中更改应用程序的主题。问题是,当我在“主题活动”中更改主题时,它将把主题更改为所有活动,但主菜单活动或应用程序的“启动器活动”中的状态栏颜色除外。如果我关闭应用程序并再次打开它,状态栏的颜色将会改变。问题是我希望状态栏颜色发生变化,而不必关闭应用程序然后再次打开。

我不知道确切应该发布什么代码,以使您更容易理解我所做的事情,因此,如果您需要其他代码,请告诉我,我将对其进行更新。

这是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()中为止。我试图了解一项活动的生命周期,但仍然没有设法解决此问题。

0 个答案:

没有答案