为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

倚天杖 2019-07-06 15:04:29
如何在运行时更改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在代码中有什么特殊的地方吗?如果这有帮助的话,我的应用程序包括几个活动。
查看完整描述

3 回答

?
慕少森

TA贡献2019条经验 获得超9个赞

如果要更改已存在活动的主题,请调用recreate()setTheme().

注意:如果您在onCreate(),以避免无限循环。


查看完整回答
反对 回复 2019-07-06
?
RISEBY

TA贡献1856条经验 获得超5个赞

recreate()(如上文所述TPReal)将只重新启动当前活动,但前面的活动仍在后台堆栈中,主题将不应用于它们。

因此,解决此问题的另一个解决方案是完全重新创建任务堆栈,如下所示:

    TaskStackBuilder.create(getActivity())
            .addNextIntent(new Intent(getActivity(), MainActivity.class))
            .addNextIntent(getActivity().getIntent())
            .startActivities();

编辑:

在UI或其他地方执行主题更改后,只需将代码放在上面。你所有的活动都应该有方法setTheme()以前打过电话onCreate(),可能是在父母的活动中。中选择的主题存储也是一种正常的方法。SharedPreferences,然后使用setTheme()方法。


查看完整回答
反对 回复 2019-07-06
  • 3 回答
  • 0 关注
  • 803 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信