我制作了一个简单的应用程序,我希望在从首选项中选择后更改应用程序的所有活动的主题(包括设置活动),但选择后主题不适用。我尝试添加了一个重新创建(),但却试图启动主要活动。现在,我添加了一个重新创建()的菜单项,但我希望它在您离开设置活动后自动应用。
MainActivity.java:
@Override
protected void onCreate(Bundle savedInstanceState) {
SharedPreferences getData = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
String themeValues = getData.getString("theme_preference", "1");
if (themeValues.equals("1")) {
setTheme(R.style.Theme_Light);
}
if (themeValues.equals("2")) {
setTheme(R.style.Theme_Dark);
}
if (themeValues.equals("3")) {
setTheme(R.style.Theme_Red);
}
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (id == R.id.action_settings) {
Intent i = new Intent("com.cyanoise.helloworld.SettingsActivity");
startActivity(i);
return true;
}
if (id == R.id.about_app) {
startActivity(new Intent(MainActivity.this, AboutActivity.class));
return true;
}
if (id == R.id.refresh_app) {
recreate();
return true;
}
if (id == R.id.exitapp) {
finish();
}
return super.onOptionsItemSelected(item);
}
SettingsActivity.java:
public class SettingsActivity extends PreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.settings);
}
}
非常感谢所有答案。
答案 0 :(得分:0)
为了在返回每个活动时在每个活动中应用新主题,但仍然只在必要时重新创建活动,我使用自编的IProducerConsumerCollection<T>
,我的所有活动都从该活动继承。
在BaseActivity
中,每个活动的主题都设置并保存在字符串变量onCreate()
中。通过记住每个活动的当前主题,只要用户转向此活动,您就可以将其与theme
中的SharedPreferences中的新主题进行比较。
像这样,如果主题尚未匹配,您只需要在恢复的活动上调用onResume()
,以使每个活动都显示最新的主题。
this.recreate()
答案 1 :(得分:-1)
好的,所以我一直在玩,并找到了解决方法。我在SettingsActivity中添加了一个onBackPressed()以再次显示MainActivity,它似乎可以工作,一旦退出设置活动就应用所选主题。
@Override
public void onBackPressed() {
super.onBackPressed();
startActivity(new Intent(SettingsActivity.this, MainActivity.class));
}
至于我刚刚添加的所有活动应用主题
SharedPreferences getData = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
String themeValues = getData.getString("theme_preference", "1");
if (themeValues.equals("1")) {
setTheme(R.style.Theme_Light);
}
if (themeValues.equals("2")) {
setTheme(R.style.Theme_Dark);
}
if (themeValues.equals("3")) {
setTheme(R.style.Theme_Red);
}
每次活动的每次创造。