android - 可绘制缩小不适用于另一个模块中声明的资产
问题描述
分享知识,问答风格
考虑具有通用库模块和配置库模块的多个应用程序模块的应用程序架构。库模块引用应用模块提供的资源。这可以实现特定于目标的优化:仅发布带有该应用变体使用的资源的应用。
引用 library 模块中的资源,使用 values 资源引入标识符:
<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
没有为每个密度桶提供资产,而是依靠系统选择最接近的匹配并根据需要扩大或缩小规模,并获得足够好的结果。
现在,当 app1 在 mdpi 密度设备(如平板电脑)上运行时,得到
android.content.res.Resources$NotFoundException:
Drawable app1.package.name:drawable/foo with resource ID #0x7f123456
如果 .png 资源直接包含在库模块中,则此最近匹配资源加载工作正常。不想在其中包含所有图像资产,因为这会使应用程序不必要地膨胀。
这种最接近匹配的资源加载在放大时可以正常工作,例如 xhdpi -> xxhdpi。只有像 xhdpi -> mdpi 这样的缩减会导致问题。
解决方案
通过将 .png 资源移动到 drawable-mdpi 解决了崩溃问题。
推荐阅读
- c# - 如何找出总和为100的数字的所有排列
- wdk - Libusb-win32,DDK,"make.cmd all" 错误:“无效的 WinDDK 目录 C:\WinDDK\7600.16385.1\”
- php - 通过 Laravel 7.0 上传图片时出错
- python - 将两个具有相同列的数据框组合起来
- c++ - 从地图中获取前两个元素
- solidity - 有什么办法可以让solidity 0.4.24从调用中获取字节数据
- javascript - crypto-js 未捕获的错误:格式错误的 UTF-8 数据
- git - Git - 如何在所有分支之间自动同步文件
- php - “woocommerce_rest_cannot_view”此错误的其他可能原因
- java - 成功编辑后 JQuery 数据表编辑器不更新行