11

可能重复:
如何在 Android 运行时更改当前主题

我有一个 Android 应用程序,允许用户在运行时在主题之间切换。切换主题很容易,但在重新创建活动之前不会应用主题。我找到了一种将主题应用于当前活动的方法,但是如果用户按下后退按钮,以前的屏幕仍然具有旧主题。如何更改这些活动的主题?支持它的应用程序示例:Tasks Free

4

2 回答 2

6

在运行时动态地,在调用 setContentView() 之前,在活动的 onCreate() 方法中调用 setTheme()。要更改主题,您只需重新启动您的活动。

请看这个文件..!

也想看看这个这个......希望这有帮助......!

于 2012-07-13T07:14:46.597 回答
5

我想只是一个提示:

finish();通话前

setResult(AnIntegerThatNotifiesThePreviousActivitiesToChangeTheme);

现在在您的所有活动中,实施 onActivityResult

protected void onActivityResult(int request, int result, Intent data) {
    if(result == AnIntegerThatNotifiesThePreviousActivitiesToChangeTheme)
    {
        //update the current theme
    }
}

另一种解决方案(更好):

实现一个保存主题的类:

public class CurrentThemeHolder {
    private CurrentThemeHolder() {
    }
    private static instance;
    public static getInstance() {
        if(instance == null)
            return new CurrentThemeHolder();
        else
            return instance;
    }
    private int mTheme; //identifier of the theme
    public getTheme() {
        return mTheme;
    }
    public setTheme(int newTheme){
        mTheme = newTheme;
    }
}

现在让你所有的活动扩展这个 ThemeActivity:

public class ThemeActivity extends Activity {
    private int mTheme;
    protected void onResume() {
        if(mTheme != CurrentThemeHolder.getInstance().getTheme()) {
            //do what you should do to set the theme
            mTheme = CurrentThemeHolder.getInstance().getTheme();
            //everytime you set the theme save it
            //this maybe should be done in onCreate()
        }
    }
}
于 2012-07-12T22:36:01.643 回答