使用自适应图标时不显示旧版图标

时间:2017-06-08 20:49:17

标签: android android-studio android-icons

我刚刚使用Android工作室中的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">

这些是图片资产工作室创建的文件

enter image description here

这只是一个Android Studio错误还是我错过了什么?

5 个答案:

答案 0 :(得分:32)

我遇到了同样的问题,并通过将mipmap-anydpi目录重命名为mipmap-anydpi-v26来解决了这个问题。

显然ic_launcher.xml文件会混淆较旧的Android版本,除了O之外,它隐藏了所有版本。无论如何,我的图标现在适用于所有版本(至少到SDK 11)。

答案 1 :(得分:12)

解决方案是将mipmap-anydpi-v26/ic_launcher.xml的适用于API级别26以上的自适应图标以及其他API级别的ic_launcher.png(注意:不是ic_launcher.xml)放在所有mimpap文件夹中。


说明

这是基本问题mipmap-anydpi优先于所有其他mipmap-*的问题。因此,如果在mipmap-anydpi中找到了资源,它将始终处于优先级。现在mipmap-anydpi-v26是一个过滤器,上面的过滤器表示mipmap-anydpi-v26的资源将始终被选择,而与设备密度无关仅当API级别为26或更高(奥利奥)时。

现在您的清单中有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中查找资源,如果不存在,则查找实际密度资源Eg。 mipmap-mdpi

接下来,您不能将ic_launcher.xml分配给小于sdk 26的android设备,因为它不知道什么是自适应图标。

因此,解决方案是将mipmap-anydpi-v26/ic_launcher.xml的适用于API级别26以上的自适应图标以及其他API级别的ic_launcher.png(注意:不是ic_launcher.xml)放在所有mimpap文件夹中。

答案 2 :(得分:1)

我也遇到了同样的问题,并解决了以下问题。

将您的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这些相同的文件夹)。

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

希望它可以帮助一些同样的问题...

答案 3 :(得分: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>

答案 4 :(得分: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。

旧版安卓系统遗留图标的主要问题是

根据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"/>