使用自适应图标时,遗留图标不显示。

29

我刚刚使用Android Studio中的Image Asset Studio将我的应用程序图标转换为与Android O的自适应图标兼容的格式。

现在当我在运行API 25的设备上运行我的项目时,我看到的是默认的绿色Android图标,而不是我的图标。

这是我的清单文件:

<application
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"
    android:allowBackup="false"
    android:roundIcon="@mipmap/ic_launcher_round"
    tools:replace="allowBackup"
    tools:ignore="GoogleAppIndexingWarning">

这些是图像资源工具创建的文件

在此输入图片描述

这只是一个Android Studio的Bug还是我漏掉了什么?


一样的情况。你解决了吗? - Jonas Borggren
对我来说,解决方案是更改启动器的主题,它已缓存了开发图标。 - Cr4xy
5个回答

37

我曾经也遇到同样的问题,通过将我的mipmap-anydpi目录重命名为mipmap-anydpi-v26解决了它。

显然ic_launcher.xml文件会让旧版Android版本出现混淆,这使它在除O之外的所有版本中都无法显示。总之,我的图标现在可以在所有版本上使用(至少支持SDK 11)。


9
我有v26目录,但在旧版API上仍然显示默认的绿色Android。 - JPM
@JPM,我建议您打开一个新的问题并附上一些源代码(就像OP在这里做的那样)。我非常自信这个技术会像广告中所说的那样起作用,但是无法猜测您的应用程序可能出了什么问题。 - Sterling
1
结果发现我仍然有mipmap-anydpi目录和mipmap-anydpi-v26。一旦我删除了mipmap-anydpi,所有版本的图标都正确了。 - JPM
1
似乎仍然存在问题。 - casolorz
只是关于这个问题的跟进,@casolorz:我在一个API 25设备(Nexus 6)上安装了Rootless Pixel Launcher,使用此答案中的“anydpi-v26”技术的各种应用程序图标都可以正常工作。无论你的应用程序发生了什么,我怀疑它与此无关;正如我建议JPM的那样,你可能考虑开启一个新的问题。 - Sterling
显示剩余6条评论

20
解决方案是在适用于API级别26及以上的自适应图标中使用mipmap-anydpi-v26/ic_launcher.xml,并在所有mimpap文件夹中放置ic_launcher.png以适用于其他API级别(注意:不是ic_launcher.xml)。
解释: 问题在于mipmap-anydpi优先于所有其他mipmap-*。因此,如果在mipmap-anydpi中找到资源,它将始终优先考虑。现在,mipmap-anydpi-v26是上面的一个过滤器,它表示资源将始终从mipmap-anydpi-v26中选择,而不考虑设备密度,但仅当API级别为26或更高版本(Oreo)时。
现在,您的清单里有 android:icon="@mipmap/ic_launcher"
如果您的设备的API级别为26或更高版本,则Android将选择使用mipmap-anydpi-v26/ic_launcher.xml,一切都运行良好。
问题发生在API级别低于26的情况下。Android会查找名为ic_launcher的资源,但由于API级别限制,它永远不会搜索mipmap-anydpi-v26。接下来,它将在mipmap-anydpi 中查找资源,如果没有,则在实际密度资源(例如mipmap-mdpi)中查找。
接下来,您无法将ic_launcher.xml提供给sdk 26以下的Android设备,因为它不知道自适应图标是什么。因此,解决方案是在适用于API级别26及以上的自适应图标中使用,并在所有mimpap文件夹中放置(注意:不是ic_launcher.xml)以适用于其他API级别。

2

我曾经面临同样的问题,并按照以下方式解决:

将你的 ic_launcher.xmlic_launcher_round.xml 放在 mipmap-anydpi-v26 文件夹中(确保你没有在相同文件夹中放置 ic_launcher.png/jpgic_launcher_round.png/jpg)。

将你的 ic_launcher.png 放在 mipmap-hdpi/mdpi/xhdpi/xxhdpi/xxxhdpi 文件夹中(确保你没有在这些相同文件夹中放置 ic_launcher.xmlic_launcher_round.xml)。

通过这样做,你将不会在构建/运行项目时遇到任何错误。

希望对遇到相同问题的人有所帮助...


0
如果还是不行,请检查您的XML模式,如果您使用Android Studio自动导入,则不会起作用,它应该是/apk/res/android。这是代码:
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
  <background android:drawable="@mipmap/ic_launcher_background"/>
  <foreground android:drawable="@mipmap/ic_launcher_foreground"/>
</adaptive-icon>

0

我会用非常简单的方式来总结。

我只是使用Android Studio生成源代码(图像的背景和前景层),这些源代码将在我的config.xml文件中使用。

因此,它看起来像这样:

<icon background="resources/android/icon/ldpi_background.png" density="ldpi" foreground="resources/android/icon/ldpi_foreground.png">

以上配置适用于Android API级别> 25。

这里出现了旧版Android中遗留图标的主要问题

根据cordova官方文档 - 自适应图标不支持旧版本的Android - 并且使用上述config.xml时,它将仅选择前景部分作为备用图标,这就是您的图标在旧版本中看起来不好的原因。

因此,我按照cordova官方文档的说明进行了以下修复:

添加具有静态图像图标的src属性 - 因此,在旧版本中,它将使用该图标而不是使用备用图标,并且对于最新版本,它将优先考虑自适应图标,因此问题将得到解决。

修复后的配置如下所示:

<icon background="resources/android/icon/ldpi_background.png" density="ldpi" foreground="resources/android/icon/ldpi_foreground.png" src="resources/android/icon/drawable-ldpi-icon.png"/>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接