可绘制的缩小比例不适用于在另一个模块中声明的资产

时间:2019-02-07 08:52:43

标签: android android-resources

分享知识,问答风格

考虑具有通用库模块和配置库模块的多个应用程序模块的应用程序体系结构。库模块引用应用程序模块提供的资源。这样可以实现针对特定目标的优化:仅在应用程序附带该应用程序变体使用的资源的情况下。

要引用库模块中的资源,请使用值资源引入标识符:

<resources>
  <item name="foo" type="drawable"/>
</resources>

然后在应用程序模块中提供资产:

app1/src/main/res/drawable-xhdpi/foo.png # variant for app1
app2/src/main/res/drawable-xhdpi/foo.png # variant for app2
# app3 configuration does not use drawable/foo, no need to provide

没有为每个密度桶提供资产,而是依靠系统choosing the nearest match and scaling up or down as necessary来获得足够好的结果。

现在,例如app1在mdpi密度的设备(例如平板电脑)上运行,

android.content.res.Resources$NotFoundException:
Drawable app1.package.name:drawable/foo with resource ID #0x7f123456

如果.png资产直接包含在库模块中,则此最匹配资源加载正常。不想在其中包含所有图像资产,因为那样会使应用程序不必要地膨胀。

例如,在向上扩展时,这种最匹配资源加载正常xhdpi-> xxhdpi。只有像xhdpi-> mdpi这样的降级会引起问题。

1 个答案:

答案 0 :(得分:0)

通过将.png素材资源移动到drawable-mdpi解决了崩溃问题。