旋转后Android主题重置

时间:2013-11-27 14:37:07

标签: android android-fragments android-activity themes

我为我的应用用户提供主题选项。但我发现旋转后主题将重置为默认主题。 这是我的代码:

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);
    }
}

此活动正在托管片段,当设备旋转时,片段仍然保留,但主题重置。

如果设备配置已更改,则应重新创建活动。是错误还是我错过了什么?

2 个答案:

答案 0 :(得分:1)

正如@CBergson指出的那样,您可以保存主题并在重新创建Activity时重新创建主题。

另一方面,您可以通过在 AndroidManifest.xml 中添加以下行来阻止Android销毁Activity

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

进一步阅读here

答案 1 :(得分:0)

您应该在首选项中保存/更新当前主题,以使其不是默认值。当旋转发生时,活动生命周期将重复(停止 - 破坏 - 启动等...)。在下一个活动周期开始之前,您需要在周期完成之前保存它。