2013-11-27 22 views
0

我爲我的應用用戶提供主題選項。但我發現主題將在旋轉後重置回默認主題。 這裏是我的代碼:旋轉後重置Android主題

protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    config = PreferenceManager.getDefaultSharedPreferences(this); 
    theme = config.getString("theme", ""); 

    setActionBarTheme(theme); 
    setContentView(R.layout.main); 
} 

private void setActionBarTheme(String theme) 
{ 
    if(theme.equals("Holo Red")) 
    { 
     setTheme(R.style.onTime_Theme_Holo_Red); 
    }else 
    { 
     setTheme(R.style.onTime_Theme_Default); 
    } 
} 

這個活動舉辦的片段,當旋轉設備,片斷保留,但主題復位。

如果設備配置發生變化,它應該重新創建活動。它是錯誤還是我錯過了什麼?

回答

1

正如@CBergson指出的,當Activity被重新創建時,您可以保存主題並重新創建主題。

在另一方面可以防止Android的毀壞您的Activity通過添加以下行到您的AndroidManifest.xml

<activity android:name="YourActivity" 
    android:configChanges="orientation|screenSize" /> 

進一步閱讀here

+0

是的,我試過了。但我更喜歡讓旋轉= D 你們是什麼意思保存主題?我已經將它保存到SharedPeferences並在創建活動時加載它。 – crossRT

+0

好吧,沒有代碼發佈,你保存它...我想你錯過了我,我的解決方案與拒絕旋轉無關。它只是指示Android以_NOT_重新創建循環中的活動。試試吧... – alex

+0

對不起,延遲迴復。是的,我的錯誤,你的回答非常好。我在開發者doc [activity]上搜索它(http://developer.android.com/guide/topics/manifest/activity-element.html)。非常感謝。 = D – crossRT

0

您應該在首選項中保存/更新當前主題,以便它不會成爲默認值。活動生命週期將在循環發生時重複(停止 - 破壞 - 啓動等)。在下一個活動週期開始之前,您需要在週期完成之前保存它。

+0

你是什麼意思保存它?我將主題保存爲字符串到SharedPreferences中,並在每次創建活動時從中加載。 – crossRT

+0

請發佈您的代碼。你說,你提供的選項可以讓用戶選擇,然後你在哪裏保存它? – Canberk

+0

我將其保存爲默認SharedPreference,並在PreferenceActivity中提供該選項。現在問題是活動開始時正確設置的主題,但它會在旋轉後重置爲默認值。 – crossRT