如何在运行时更改Android中的当前主题

如何在运行时更改Android中的当前主题

我创建了PreferenceActivity,允许用户选择要应用于整个应用程序的主题。

当用户选择主题时,将执行以下代码:

if (...) {
    getApplication().setTheme(R.style.BlackTheme);} else {
    getApplication().setTheme(R.style.LightTheme);}

但是,即使我已经与调试器检查了代码正在执行中,我仍然看不到用户界面中的任何更改。

主题定义为res/values/styles.xml,Eclipse没有显示任何错误。

<resources>
    <style name="LightTheme" parent="@android:style/Theme.Light">
    </style>

    <style name="BlackTheme" parent="@android:style/Theme.Black">
    </style>    </resources>

知道会发生什么以及如何解决吗?我该打电话吗?setTheme在代码中有什么特殊的地方吗?如果这有帮助的话,我的应用程序包括几个活动。


倚天杖
浏览 804回答 3
3回答

慕少森

如果要更改已存在活动的主题,请调用recreate()后setTheme().注意:如果您在onCreate(),以避免无限循环。

RISEBY

recreate()(如上文所述TPReal)将只重新启动当前活动,但前面的活动仍在后台堆栈中,主题将不应用于它们。因此,解决此问题的另一个解决方案是完全重新创建任务堆栈,如下所示:&nbsp;&nbsp;&nbsp;&nbsp;TaskStackBuilder.create(getActivity()) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.addNextIntent(new&nbsp;Intent(getActivity(),&nbsp;MainActivity.class)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.addNextIntent(getActivity().getIntent()) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.startActivities();编辑:在UI或其他地方执行主题更改后,只需将代码放在上面。你所有的活动都应该有方法setTheme()以前打过电话onCreate(),可能是在父母的活动中。中选择的主题存储也是一种正常的方法。SharedPreferences,然后使用setTheme()方法。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android