根据 Flavor 在 Android Studio 中显示布局

Show Layouts in Android Studio depending on Flavor

我在 Android Studio 中有一个项目,它对不同的颜色使用不同的口味(还有一些其他的东西,但它们无关紧要)。

我想看看某个 UI 元素(全部由 xml 文件定义)在非默认风格下看起来如何?

假设我必须选择风味,风味 A 是默认的,风味 B 不是。假设风味A主色为红色,风味B主色为绿色。

当我打开布局时,它们将始终显示为红色,无论选择了哪种构建变体。

我确定有办法做到这一点,但我不知道怎么做。

Edit1:我好像没有解释(以为是隐含的)。 我的口味资源文件已经在不同的文件夹中。资源文件中的颜色同名。这不是问题,问题是我在 Android Studio 中的布局中看不到颜色。

颜色位于单独的文件夹中,并且可以正常工作。当我构建和安装 flavors 时,它们会使用它们的颜色。但是当我打开一个布局时,它总是以 Android Studio

中的默认颜色显示

如果颜色在 XML 中定义,只需将颜色定义从 main/colors.xml 移动到 flavorA/colors.xmlflavorB/colors.xml

Let me blow out some dusts first :

您在布局文件中获得默认颜色是因为,您的布局位于默认文件夹 (本例中为主包).

这里发生的是,当您创建特定风味的构建时(假设 flavorA),打包系统会获取特定于从默认文件夹复制的风味的文件并替换它为您提供 flavor-specific build.

因此,您生成的 apk 文件包含 flavor 特定文件 (colors.xml 在您的情况下) + 来自 main (main 的 res 文件夹,如所有布局和其他资源以及您的 class 文件)的默认文件 不是您特定风格的一部分文件夹。

这就是一切完美的原因。


Now back to point : (Hack)

您应该怎么做才能看到具有特定口味颜色的布局?

"Although I would not recommend this way" 除非你对特定风格的构建有不同的布局逻辑,否则你所能做的就是将特定的布局文件 (只是为了查看渲染输出)您的 layout 文件夹 在您的 flavorA 目录.

所以,它现在将从 flavorA 文件夹中获取颜色,并在 IDE 中呈现您的布局,其中的颜色你的布局文件。

注意:再次强调,这只是一种以特定风味方式看待不同事物的 hacky 方式,而不是解决方案。尽管我认为这个问题甚至没有解决方案,因为这不是问题,这就是 multi-flavor gradle 构建系统的工作方式,这不是这个系统中的错误 .

编辑:


所以,经过一些研究,我发现了如何实现这样的事情 'you get rendered output based on your flavor colors'。

假设您根据自己的口味使用不同的颜色,如下所示:

现在,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

解决方法: 这种情况下,你可以简单地从你的[=125中删除colors.xml =] 文件夹。它不会产生任何错误,除非您缺少 "current build variant".

的任何风味特定颜色属性

查看我项目的 主目录 :

(正如您在此处看到的,主资源目录不包含任何 colors.xml 文件)

因此,如果您尝试更改构建变体并查看任何 布局文件 ,它会为您选择退出特定的产品风味颜色。

注意:注意,如果您从一种口味中添加或删除一种颜色,请记住也将其add/remove添加到其他口味中,否则您的项目在构建时可能会出错。 (你也可以对其他资源做同样的技巧,比如可绘制对象、布局、尺寸等。只要确保每种风格都包含相同的资源名称)

我不确定它是否可能影响带有风格的布局预览,但它绝对有可能影响主题,所以让我提出一个解决方法。

1) 在您的主要源集中创建两个主题:

    <style name="MyStyle">
        <item name="colorPrimary">#44f</item>
    </style>

    <style name="MyStyle.Red">
        <item name="colorPrimary">#f44</item>
    </style>

这基本上足以自定义布局预览:您可以 select 想要的主题。

2) 要制作您的布局 flavor-dependent,请创建一个将继承 MyStyleMyStyle.Red 的主题,具体取决于风格

在主要源集中:

<style name="MyFlavorDependentStyle" parent="MyStyle"/>

风味源集中:

<style name="MyFlavorDependentStyle" parent="MyStyle.Red"/>

并在布局中使用 MyFlavorDependentStyle