我有一个在几个片段之间切换的活动。此活动具有默认样式,但是当我更改为某些特定片段时,我希望它更改样式。我做了一些研究,得到了在片段的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);
此代码仅在活动重新启动时才有效(例如:如果我旋转设备,它将根据需要更新为新样式)。我认为无法在没有重新创建活动的样式之间切换,还是我错了?
最佳答案
从技术上讲:不。
如果已创建活动,则无法更改当前主题。
此代码仅在活动重新启动时才有效(例如:如果我旋转
设备,它会更新为我想要的新样式)。我认为不是
可以在样式之间切换,而无需重新创建活动或
我错了吗?
由于轮换包括对活动的重新娱乐,因此这就是“起作用”的原因。
但是……有一个名为Pocket的应用程序(如果我没记错的话,也可以是Press和Firefox)可以巧妙地实现这一目的。
怎么做?
基本上,诀窍在于以下公式:
Base Color1 + Middle Color = Theme Color 1
Base Color2 + Middle Color = Theme Color 2
请记住,中间色是相同的。对于基色,您必须将其放入包含您的应用程序实例的Window中,如下所示:
getWindow().setBackgroundDrawable(new ColorDrawable(isLight ? Color.WHITE : Color.BLACK));
因此,当与中间颜色结合使用时,将为您提供两个不同的主题。
在这里,您可以看到如何做到的(它很好地解释了这个概念):
http://sriramramani.wordpress.com/2012/12/06/runtime-theme-change/
编辑1:
在链接文章中添加了更多说明