我一直试图让我的应用程序从首选项中读取数据,并根据所选的选项更改主题。我在互联网上发现了许多不同的建议,包括这里,但一直未能得到它的工作。使用偏好更改Android应用程序的主题
我已经创建了preferences.xml和arrays.xml,用户可以选择他们想要的主题。但是,更改并未反映在应用程序中。
这里是ActivityMain.java的内容:
public class MainActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
String userTheme = preferences.getString("prefTheme", "darkab");
if (userTheme.equals("darkab"))
setTheme(R.style.darkab);
else if (userTheme.equals("light"))
setTheme(R.style.light);
else if (userTheme.equals("dark"))
setTheme(R.style.dark);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@SuppressLint("NewApi")
protected void onResume(Bundle savedInstanceState) {
recreate();
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
String userTheme = preferences.getString("prefTheme", "darkab");
if (userTheme.equals("darkab"))
setTheme(R.style.darkab);
else if (userTheme.equals("light"))
setTheme(R.style.light);
else {setTheme(R.style.dark);}
super.onResume();
setContentView(R.layout.activity_main);
}
这些都是我想使用,如在styles.xml设置的样式:
<style name="darkab" parent="android:Theme.Holo.Light.DarkActionBar"></style>
<style name="light" parent="android:Theme.Holo.Light"></style>
<style name="dark" parent="android:Theme.Holo">
,这里是我的preferences.java文件:
public class Preferences extends PreferenceActivity {
@SuppressWarnings("deprecation")
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
任何帮助,将不胜感激。
setTheme()在setContentView()之前是不是? 要重新启动活动,是否需要将recreate()放在onResume部分中? – 2013-02-22 13:45:12
@CarlAnsell使'setTheme()'成为'onCreate()'中的第一条语句。 http://code.google.com/p/android/issues/detail?id=4394 – 2013-02-22 13:46:33
谢谢,它现在正在工作。但是,它只在按下应用程序后退按钮时才起作用,而不是系统后退按钮。我更新了我在OP中使用的代码。 – 2013-02-22 14:13:08