当前位置: 首页 > 知识库问答 >
问题:

更改正在使用的Android片段上的活动主题解除挂起

公良弘毅
2023-03-14

我有一个在几个片段之间切换的活动。此活动具有默认样式,但当我更改为某些特定片段时,我希望它更改样式。我做了一些研究,我得到了这个代码,我运行在一个片段的onCreateView():

// create ContextThemeWrapper from the original Activity Context with the custom theme
    Context context = new ContextThemeWrapper(getActivity(), R.style.GreyTheme);
    // clone the inflater using the ContextThemeWrapper
    LayoutInflater localInflater = inflater.cloneInContext(context);
    // inflate using the cloned inflater, not the passed in default 

    View rootView = localInflater.inflate(R.layout.my_layout, container, false);

此代码仅在活动重新启动时有效(例如:如果我旋转设备,它会根据需要更新为新样式)。我认为在不重新创建活动的情况下,不可能在风格之间切换,还是我错了?

共有1个答案

戚学文
2023-03-14

从技术上讲:没有。

如果已创建活动,则无法更改当前主题。

此代码仅在活动重新启动时有效(例如:如果我旋转设备,它会根据需要更新为新样式)。我认为在不重新创建活动的情况下,不可能在风格之间切换,还是我错了?

由于轮换包括活动的再创造,这就是为什么“工作”的原因。

但是…有一个叫做Pocket的应用程序(如果我没记错的话,也包括Press和Firefox)以一种巧妙的方式实现了这一点。

怎么做?

基本上,诀窍在于这个公式:

Base Color1 + Middle Color = Theme Color 1

Base Color2 + Middle Color = Theme Color 2

请记住,中间颜色是相同的。对于基础颜色,您必须将其放在保存应用程序实例的窗口中,如下所示:

getWindow().setBackgroundDrawable(new ColorDrawable(isLight ? Color.WHITE : Color.BLACK));

因此,当与中间颜色相结合时,会给你两种不同的主题。

在这里你可以看到你是如何做到的(它很好地解释了这个概念):

http://sriramramani.wordpress.com/2012/12/06/runtime-theme-change/

编辑1:

为链接帖子添加了更多解释

 类似资料:
  • 我是一个新的Android系统,我有一个按钮,当我点击按钮时,它会显示一个弹出菜单。 它有两个项目,白天和晚上。 当我按夜间按钮时,整个活动主题更改为黑色,文本颜色为白色,而按白天按钮时,活动主题更改为白色,文本颜色为黑色。 我有一个代码,但它只更改弹出菜单。 我如何更改活动主题。 我的代码: style.xml

  • 我正在创建一个包含两个片段的活动。一个用于求和减法,另一个用于显示总值主活动包含变量(总值),如果片段中的值为总和,则变量(总值)按输入值增加,否则按输入值减少 这个变量(总数)显示在第二个片段中

  • fragment类主活动/主活动如何限制我的主活动在从片段的最后一页返回到主活动时不返回到片段的最后一页,就像我有一个主活动,单击按钮该主活动会导致另外3个活动,其中一个活动有片段。片段的最后一页指向home activity,但当我在home activity上后退时,它再次将我引导到片段的最后一页,然后我再次按下back按钮,然后我的应用程序关闭

  • 问题内容: 我想将自己更改为我尝试过的内容,但无法将我的活动更改为片段。有人可以告诉我该怎么做吗?在哪里编辑我是Android上的新手。请告诉我和在此先感谢 这是我的活动: 问题答案: 只要了解一些步骤,您就可以现在和将来轻松地将Activity转换为Fragment ..: 首先,不要扩展,只要扩展.. 例如: 然后覆盖.. 然后通过LayoutInflater扩展布局,并分配给进一步用于子视图

  • 在为手机和平板电脑设计时,在应用程序中使用片段而不是活动的是什么? 我们是不是应该有手机的活动和平板电脑的碎片。除了使之外,手机的碎片还有什么好处吗? android开发网站http://developer.android.com/guide/components/fragments.html在电话上说,这些片段被分成那么使用这些片段有什么意义呢?

  • 我需要创建一个“滑动活动”,当用户滑动它时它会滑动。当用户向左“滑动”时,活动应该向左滑动,新的活动会从右侧来到屏幕上。你不能把它放在中间。同样的事情发生在雅虎邮件应用程序中。你可以在阅读邮件时看到这个,向左滑动邮件移动到下一封邮件。就像下面一样。 在图中,您可以看到下一封邮件(标题为“谢谢”)正在从侧面打开。在我的例子中,它们是两种不同的活动。我们还建议在当前活动的右侧显示下一个活动的一小部分(