如何根据不同的产品风格自动更改绘制资源?

4
我正在处理一个非常混乱的应用程序,这是我第一次使用flavors。该应用程序有4、5个口味,所有口味都具有相同的背景颜色、可绘制对象等,只有标志不同。
现在,我必须创建一个全新的口味,其布局完全不同。背景颜色应为黄色,而不是灰色,可绘制图像应为黑色,而不是白色。问题是,我有大约100个不同的白色图像。是否有一种方法可以自动将它们更改为黑色?(设计师可以重新绘制它们或以黑色放置在该口味的drawable文件夹中)或者我必须编程方式检查是否使用了新口味,然后对每个使用白色drawable的小部件调用setDrawable(newBlackImage)?因为所有drawable都是通过XML布局设置的,所以这似乎是一种非常复杂的方法。
他们使用flavors的方法是创建资源bool文件,然后在代码中检查某个键是否具有true/false值,然后隐藏/显示某些内容...所以我应该做类似的事情吗?
以下是其中一种口味的项目结构:

enter image description here

正如您所看到的,每种口味只有不同的启动器和登录屏幕图标。此外,每个口味都有自己的数组、布尔值和字符串资源文件。但是它们所有的共用白色图标的布局资源和可绘制资源。

如果您使用VectorDrawables而不是图像资源,它们可以在程序中进行着色,而无需使用不同的文件。 - Hobo Joe
很不幸,它们全部都是图像资源 :/ 设计师告诉我他可以发送黑色的,所以这不是问题。主要问题是,我有一个布局,将imageview的src设置为其中一个白色图标。我只想避免在程序中将其更改为黑色图标。 - joe
1个回答

6
我认为你已经在正确的方向上了。通过在gradle文件中为每个可绘制组创建特定的flavours,您只需要为具有特定文件的flavours创建一个drawable文件夹。
例如,'黑色'风味将需要一个drawable文件夹,其中存储了所有黑色背景图像。
为了使其正常工作,必须为所有flavours存在所有资源,因此您不需要更改代码的任何部分。
您可以在这里找到快速指南:https://medium.com/@thiagolopessilva/the-handling-multiple-java-source-and-resources-using-flavors-on-gradle-18a4b581285b

这是一篇很棒的文章,谢谢!现在我理解得更好了,所以我更新了我的问题,你可以看看我的项目结构是否有问题。也许问题在于所有白色图标都在主绘图文件夹中,而所有布局都在主布局文件夹中..每个风味只有不同的启动器图标。因此,如果我在一个布局中更改了某些内容,所有风味都会有该更改。如果我理解正确,那么我向你展示的这种风味结构应该有带有黑色图标的绘图文件夹,对吗?但是那样它也需要所有布局才能分配这些图标? - joe
也许由于所有的风格都使用相同的布局,我可以将所有黑色图标放在这个风格的drawable文件夹中,并将它们命名为与白色相同的名称?因此,布局将具有带有android:src="@drawable/ic_add_white_24dp"字段的ImageView,因此,如果我的风格在其drawable中具有ic_add_white_24dp(但它将是黑色的),它将使用那个... - joe
没错。main文件夹中的资源是您的基准,任何与路径/名称相同的口味文件夹中的资源都将在应用程序中覆盖它们。 - Hobo Joe
抱歉回复晚了,但你说得对。 - ansorod

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