1

我有自适应 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 的预览。

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:下面分别是输出xxhdpihdpi屏幕的比较

xxhdpi 图标 hdpi 图标

正如我所看到的,结果是不同的。也许有一种解决问题,也许在资源文件夹命名中。

UPD 4:我已经检查了可能的解决方案,在评论中提出了建议。

使用bitmaps 而不是drawable引用没有区别,因为最终结果已正确构建(正如我在概览窗口中看到的那样),但“桌面”版本的图标仍然显示不正确。

似乎这是一个系统错误:(

4

1 回答 1

0

只需为您的图标制作一个矢量。

于 2020-05-24T08:13:22.170 回答