如何根据口味自动更改可绘制对象?

How to automatically change drawables depending on a flavor?

我正在开发一个非常混乱的应用程序,并且是第一次使用 flavors。应用程序有大约 4,5 种风格,所有风格都具有相同的背景颜色、可绘制对象等。只有徽标不同。

现在我必须制作一种布局完全不同的新口味。背景颜色应该是黄色而不是灰色,可绘制图像应该是黑色而不是白色。问题是,我有 100 张不同的白色图像。有没有办法可以自动将它们更改为黑色? (设计师可以重新绘制它们或任何黑色的东西,我可以将它们放在那种风格的可绘制文件夹中)或者我必须以编程方式检查是否使用了新的风格,然后在每个使用白色可绘制对象的小部件上调用 setDrawable(newBlackImage)?这似乎是一种非常复杂的方法,因为所有可绘制对象都是通过 XML 布局设置的..

他们使用 flavor 的方式是创建资源 bool 文件,然后在代码中检查某些键是否有值 true/false 然后 hide/show 一些事情...所以我想我应该做与此类似的东西,或者没有?

这是我的一种口味的项目结构:

如您所见,每种口味只有不同的启动器和登录屏幕图标。每个人都有自己的数组、布尔和字符串资源文件。但是它们都共享相同的布局资源和带有白色图标的可绘制对象。

我认为你已经走对了路。通过为 gradle 文件中的每组可绘制对象创建特定的风格,您只需要为具有特定文件的风格创建一个可绘制文件夹。

例如,flavor 'black' 需要一个可绘制文件夹,其中将存储所有黑色背景图像。

为了使其正常工作,所有资源都必须适用于所有类型,因此您无需更改代码的任何部分。

您可以在此处找到快速指南: https://medium.com/@thiagolopessilva/the-handling-multiple-java-source-and-resources-using-flavors-on-gradle-18a4b581285b