【发布时间】:2014-12-01 15:05:37
【问题描述】:
我做了一个简单的应用程序,我想在从首选项中选择后更改应用程序的所有活动(包括设置活动)的主题,但主题在选择后不适用。我尝试添加一个 recreate() 但在尝试启动主要活动时陷入困境。现在,我添加了一个执行 recreate() 的菜单项,但我希望它在您离开设置活动后自动应用。
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);
}
}
非常感谢所有答案。
【问题讨论】:
-
@DerGolem 我看过那篇文章,但我不太了解那里的代码和答案。希望在这里有一个更清晰、更解释的答案。
-
在合成中,直到每个Activity重新启动后,才会应用主题。
标签: android android-preferences android-theme