我一直試圖讓我的應用程序從首選項中讀取數據,並根據所選的選項更改主題。我在互聯網上發現了許多不同的建議,包括這裏,但一直未能得到它的工作。使用偏好更改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