安卓6.0(棉花糖)中的窗口背景(windowBackground)

14

我已经为我的应用程序定义了一个基础样式,其中包含以下元素:

<item name="android:windowBackground">@color/window_background</item>

我为所有活动设置了背景颜色,一切正常,直到我在Android 6上测试我的应用程序,那里的所有背景都是白色。在运行早期Marhsmallow设备上,背景仍然是color/window_background。

有人知道如何使这在Android 6上工作(或者为什么它不起作用)吗?

编辑了一些更多信息: 我正在针对API 22进行目标设置,我没有改变任何以前版本的东西或升级API,只是在Android 6上运行会改变背景。


你的目标API是22还是23? - Kamen Stoykov
这个问题无法回答。我无法通过简单的空白应用程序重现此问题,而且您也没有提供适当的MCVE。您的应用程序设置、布局、视图、代码中可能存在导致此问题的问题。如果无法重现问题,我们只能猜测。即使是遇到类似问题的人也可能给出错误的答案,因为他们的问题可能与您的不同。 - Dalija Prasnikar
@DalijaPrasnikar 嗯,我并不完全同意。是的,猜测有人可能遇到了相同的问题,然而,这种猜测可能会帮助某个人。既然我不是唯一遇到这个问题的人,我希望有人已经解决了它并知道问题所在。 - Heinrisch
首先,您提供的关于您的应用程序的信息非常少。由于不同操作系统版本之间存在行为变化,因此有很大的可能性有人会知道确切的答案并给出适当的解释。但是现在显然不会发生这种情况。现在是您提供更多信息和MCVE的正确时间,以便那些没有此问题的人可以重现它并可能找到原因。 - Dalija Prasnikar
当您在这里提出问题时,潜在的回答者不仅是那些确切了解您所说内容的人,还有其他有知识的人,如果您提供足够的输入,他们可以为您找到答案。问题本身肯定足够有趣,以至于某人可能会开始挖掘,看看为什么会发生什么,并且一旦问题可以在小型测试应用程序中重现,就可以找到解决方法。 - Dalija Prasnikar
显示剩余3条评论
4个回答

3

我还没有找到任何特定于Marshmallow的原因导致这种情况。所以我的建议是:

将背景颜色资源更改为可绘制的形状资源。

来自:

<item name="android:windowBackground">@color/window_background</item>

收件人:

<item name="android:windowBackground">@drawable/window_background</item>

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
    <solid android:color="@color/window_background"/>
</shape>

如果您尚未检查所有视图的不透明度,请注意:
确保您的windowBackground实际上是大多数Activity的背景(特别是在需要避免过度绘制的可滚动部分上),尽可能删除不透明视图的背景。
让您的windowBackground为您服务,而不是使用null
我认为这很有趣,可以了解如何设置背景层的先后顺序。我不确定您是否正在设置任何视图背景或如何设置应用程序,但这值得一读。
背景由几个层组成,从后到前:
  • 主题的背景Drawable
  • 固体颜色(通过setColor(int)设置)
  • 两个Drawable,之前和当前(通过setBitmap(Bitmap)或setDrawable(Drawable)设置),可能处于转换中
BackgroundManager
我找不到Marshmallow主题或元素顺序有何区别,似乎没有根本性变化,我也找不到关于此问题的错误。
希望这可以帮助您,如果有需要,可以再看一下。如果这不起作用,则值得发布与问题相关的其他代码。谢谢。

我也遇到了同样的问题,但是使用形状资源的解决方案对我没用。这个 bug(或者是什么其他问题)最大的问题在于它也会出现在像 PreferenceFragment 这样不如普通布局容易重写的地方。 - Matous Hybl
1
抱歉耽搁了,感谢你的回答和调查。我一直在尝试不同的样式,似乎有些东西覆盖了背景。然而,我还没有真正能够重现这个问题。由于很多人都遇到了同样的问题,我以为会有一个简单的答案,但看来并没有。所以,请大家再次仔细检查你们的样式 :) 如果没有明确的答案出现,我会给你们奖励的。谢谢! - Heinrisch

1
我曾经遇到过同样的问题,但是通过尝试,我发现如果在我的样式中注释掉 actionBarTheme,它就突然开始工作了。我深入研究了我的样式,并发现操作栏的样式设置了一个 android:background 属性,在注释掉它之后,一切都按预期工作了。

注释掉所有android:background的实例,不做任何更改。 - Heinrisch

0
如果您正在使用Android Studio 1.4或更高版本,请转到包含您的主题的样式,并单击右上角的“打开编辑器”。然后在那里更改窗口背景。它应该在“android:colorBackground”下面。

我尝试过这个方法,它在几个地方添加了windowBackground,但是并没有改变背景。 - Heinrisch

0

设置 windowBackgroundcolorBackground 两个属性怎么样?

<item name="android:windowBackground">@color/window_background</item>
<item name="android:colorBackground">@color/window_background</item>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接