先让我先打扫一些灰尘:
您在布局文件中获取默认颜色是因为,您的布局位于默认文件夹下(在这种情况下为主包)。
这里发生的情况是,当您创建特定风味的构建(比如 flavorA)时,打包系统会拿取特定于那个风味的文件,这些文件从默认文件夹复制并替换,以提供特定于风味的构建。
因此,您生成的 apk 文件包含特定于风味的文件(在这种情况下为 colors.xml)+主要的默认文件(来自主要的 res 文件夹,例如所有布局和其他资源以及您的类文件),这些不是您特定于风味的文件夹的一部分。
这就是为什么一切都能完美工作的原因。
现在回到重点:(黑客)
您应该怎么做才能看到有风味的颜色呢?
"虽然我不建议这种方式",除非您对特定于风味的构建具有不同的布局逻辑,否则您所能做的就是将特定的布局文件 (仅为了查看渲染输出) 放置在flavorA目录下的layout文件夹中。
因此,它现在将从flavorA文件夹中获取颜色,并使用该颜色在您的布局文件中在IDE中呈现您的布局。
注意:再次说明,这只是一种以特定于风味的方式查看不同事物的hacky方法,而不是解决方案。即使我认为没有解决这个问题的方法,因为这不是问题,这是多风味 gradle 构建系统的工作方式,这不是该系统中的错误。
编辑:
因此,在调研后,我找到了如何实现 '根据您的风味颜色获得呈现输出' 的方法。
假设您基于风味拥有不同的颜色,如下所示 :
![enter image description here](https://istack.dev59.com/AtnIZ.webp)
现在,flavorB和flavorW的内容是不同的,但colors.xml文件具有相同的颜色属性,如下所示:
flavorB 包含 :
colors.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>
flavorW包含:
colors.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;DR
解决方案:在这种情况下,您可以从 main/res/values 文件夹中简单地删除 colors.xml 。除非您缺少特定于“当前构建变体”的flavor属性颜色,否则不会生成任何错误。
查看我的项目的 main 目录:
![enter image description here](https://istack.dev59.com/EuswS.webp)
(如您所见,主资源目录不包含任何 colors.xml 文件)
因此,如果您尝试更改您的构建变体并查看来自主要的任何 layout 文件,它将为您选择特定于产品风味的颜色。
注意:请注意,如果您从一个flavor添加或删除一个颜色,请确保也将其添加/删除到其他flavor中,否则在构建时可能会出现错误。 (您也可以使用其他资源执行相同的技巧,例如绘图,布局,尺寸等,只需确保每个flavor都包含具有相同资源名称的所有内容)