【问题标题】:Changing theme of an activity without recreating activity在不重新创建活动的情况下更改活动主题
【发布时间】:2014-10-18 11:16:12
【问题描述】:

我有一个活动。在那个按钮上单击我想更改主题,但在任何地方我发现主题只能设置一次,而且在 setContentView 之前也是如此。 重新开始活动不是我的选择。也许使用 attrs 必须解决这个问题。但我不知道如何使用它。请帮忙!!

提前致谢!!

【问题讨论】:

  • 您的问题解决了吗?请不要忘记接受对您最有帮助的答案。

标签: android android-theme declare-styleable


【解决方案1】:

不,这是不可能的,来自the relevant documentation

public void setTheme (int resid)

为此上下文设置基本主题。请注意,这应该被称为 在上下文中实例化任何视图之前(例如之前 调用 setContentView(View) 或 inflate(int, ViewGroup))。

所以你必须在调用setContentView()之前用setTheme()设置主题,之后就无法更改了。您唯一的选择是重新创建Activity


顺便说一句:你说重新创建Activity 不是一个选项似乎很奇怪,Activities 有一个明确定义的生命周期,通过坚持这个生命周期应该是可能的重新创建 Activity 您或 Android 操作系统想要的频率。事实上,您应该知道您的Activity 可以随时被Android 操作系统杀死和重新创建,这实际上是Android 的正常和预期行为。因此,重新创建Activity 不是一种选择似乎表明您的应用程序设计中存在更深层次的问题,如果不解决,无论如何都会显现出来。

【讨论】:

  • 但是使用 attrs.xml 必须做一些事情我的意思是可以更改样式的属性??
  • 不,这与它无关。 XML 属性在 onCreate() 中加载,就像您在 onCreate() 中调用 setTheme() 一样,就像在 setTheme() 中一样,您之后无法更改它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-11
  • 1970-01-01
  • 2020-12-23
  • 1970-01-01
相关资源
最近更新 更多