让我先吹一些灰尘:
您在布局文件中获得默认颜色是因为,您的布局位于默认文件夹(在这种情况下为主包)下。
这里发生的情况是,当您创建特定风味的构建(比如说flavorA)时,包装系统会获取从默认文件夹复制的特定于该风味的文件,并将其替换为您提供特定于风味的构建。
因此,您生成的 apk 文件包含特定于风味的文件 (在您的情况下为 colors.xml) +来自 main 的默认文件(main 的 res 文件夹,如所有布局和其他资源以及您的类文件),它们不是特定于风味的文件夹的一部分.
这就是为什么一切都很完美。
现在回到重点:(Hack)
您应该怎么做才能看到具有特定风味颜色的布局?
“虽然我不推荐这种方式”,除非您对特定风味的构建有不同的布局逻辑,您所能做的就是将特定的布局文件(只是为了查看呈现的输出)放在您的风味目录下的布局文件夹中。
因此,它现在将从flavorA文件夹中获取颜色,并在IDE中使用您的布局文件中的颜色呈现您的布局。
注意:同样,这只是一种以特定方式查看不同事物的 hacky 方式,而不是解决方案。即使我认为这个问题甚至没有解决方案,因为这不是问题,这就是多风格 gradle 构建系统的工作方式,这不是这个系统中的错误。
编辑:
因此,经过一些研究,我发现了如何实现“根据风味颜色获得渲染输出”的方法。
假设您根据自己的口味有不同的颜色,如下所示:
现在,对于colors.xml文件, flavorB和flavorW的内容是不同的,但具有相同的颜色属性,例如:
风味 B包含:
颜色.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#757575</color>
<color name="colorPrimaryDark">#212121</color>
<color name="colorAccent">#607d8b</color>
</resources>
风味W包含:
颜色.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#6d4c41</color>
<color name="colorPrimaryDark">#3e2723</color>
<color name="colorAccent">#33691e</color>
</resources>
如您所见,颜色元素的数量相同,但值不同。
TL;博士
解决方案:在这种情况下,您可以简单地从main/res/values文件夹中删除colors.xml 。除非您缺少“当前构建变体”的任何风味特定颜色属性,否则它不会产生任何错误。
查看我的项目的主目录:
(如您所见,主资源目录不包含任何colors.xml文件)
因此,如果您尝试更改构建变体并查看 main 中的任何布局文件,它将为您选择特定的产品风味颜色。
注意:请注意,如果您从一种风味中添加或删除一种颜色,请记住也要将其添加/删除到其他风味中,否则您的项目在构建时可能会出错。(您也可以对其他资源执行相同的技巧,例如可绘制对象、布局、尺寸等。只要确保每个风味都包含具有相同资源名称的所有内容)