我有一个图书馆项目和一个应用程序项目。除了其他东西,libary项目包含一些png和一些矢量drawables。现在,我可以通过给它相同的名称轻松覆盖应用程序项目中的png drawable,它将正确显示。这不适用于矢量drawables:应用程序总是显示在Android 4和5上的库中定义的矢量drawables。应用程序永远不会显示应用程序项目的矢量drawables。
Google claims an application's resources always have priority over a library's resources:
由于工具将库模块的资源与依赖应用程序模块的资源合并,因此可能在两个模块中定义给定的资源ID。在这种情况下,工具从应用程序或具有最高优先级的库中选择资源,并丢弃其他资源。在开发应用程序时,请注意,可能会在多个项目中定义公共资源ID并将其合并,应用程序或最高优先级库中的资源优先。
但正如我所说,如果是矢量绘图,出于某种原因,它是相反的。知道我能做些什么来确保矢量drawables被覆盖就像普通的drawables和其他资源一样?
更新:Resolved in support library v23.2!现在没什么可做的:)
答案 0 :(得分:8)
构建库项目后,VectorDrawable
会为每个密度创建PNG文件,并将原始VectorDrawable
放入 drawable-anydpi-v21 。
如果您将{{1>}放入应用中的 drawable-anydpi-v21 ,那么它将覆盖您的图书馆项目中的drawable。这似乎是一个错误,应该创建一个新问题(如果还没有)。
注意:这不会替换库中生成的PNG文件。您还需要将这些内容添加到您的应用中以覆盖它们。
答案 1 :(得分:3)
基于"注意"在Jared Rummler的回答中,由于这不符合评论我会在这里为那些无法找到生成的PNG文件的人发布一个小教程:
如果您使用的是产品风格build/intermediates/res/merged/debug
,则可以在build/intermediates/res/merged/<flavor>/debug
内找到包含所需文件的文件夹。现在,将PNG文件复制到应用程序最困难的方法是完全复制其文件夹,即:
drawable-ldpi-v4
drawable-mdpi-v4
drawable-hdpi-v4
drawable-xhdpi-v4
drawable-xxhdpi-v4
drawable-xxxhdpi-v4
作为最后和繁琐的步骤,您应该删除不需要的所有文件,即那些不会从您的矢量绘图中生成的文件。如果您通过仅添加所需的PNG来使用VCS,则此操作最简单。这会将所有冗余文件放在Unversioned Files下。
你去了,与drawable-anydpi-v21一起,现在还有7个额外的文件夹只是因为这个愚蠢的错误:(
更新:Resolved in support library v23.2!截至今天,终于没有必要做上述任何一项。只需确保在任何地方使用app:srcCompat而不是android:src。