我有自适应 XML 图标,由 3 个可绘制对象构建。
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background>
<layer-list>
<item>
<shape>
<solid android:color="#fff" />
<size android:width="108dp" android:height="108dp" />
</shape>
</item>
<item android:drawable="@drawable/icon_abc"
android:width="54dp"
android:height="27dp"
android:top="27dp"
android:left="27dp" />
</layer-list>
</background>
<foreground>
<layer-list>
<item
android:width="108dp"
android:height="56dp"
android:drawable="@drawable/icon_foreground"
android:top="56dp"
/>
<item
android:width="54dp"
android:height="27dp"
android:drawable="@drawable/icon_pluseq"
android:left="27dp"
android:top="56.5dp"
/>
</layer-list>
</foreground>
</adaptive-icon>
下面是来自 Android Studio 的预览。
但是当我在模拟器(API v27)上安装我的应用程序时,我看到了这个:
在写这篇文章之前,我已经阅读了这个问题的答案。在链接的问题中,问题是图标大小不合适,但我的图标大小为 108x108dp,内部前景大小为 72x72dp(如预览所示)。在这种情况下,我看到该图标根本没有居中。
UPD:在概览窗口中图标正确显示:
UPD 2:如果我使用经典方法并webp
为背景和前景提供两个 mipmap,如下所示,则图标将按预期显示。
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@mipmap/icon_xxhdpi_background" />
<foreground android:drawable="@mipmap/icon_xxhdpi_foreground" />
</adaptive-icon>
但是使用这种方法,我无法实现 xml 可绘制对象,例如缩放 mipmaps 以获取圆形版本的图标。这意味着我不得不存储 2 个不同版本的webp
图标(4 个图像),总大小为 10 KiB,比 2 KiB 的 xml 版本大 5 倍。
UPD 3:下面分别是输出xxhdpi
和hdpi
屏幕的比较
正如我所看到的,结果是不同的。也许有一种解决问题,也许在资源文件夹命名中。
UPD 4:我已经检查了可能的解决方案,在评论中提出了建议。
使用bitmap
s 而不是drawable
引用没有区别,因为最终结果已正确构建(正如我在概览窗口中看到的那样),但“桌面”版本的图标仍然显示不正确。
似乎这是一个系统错误:(