web-dev-qa-db-fra.com

L'icône héritée ne s'affiche pas lors de l'utilisation de l'icône adaptative

Je viens de convertir l'icône de mon application pour qu'elle soit compatible avec les icônes adaptatives d'Android o à l'aide du Image Asset Studio dans Android Studio.

lorsque j'exécute mon projet maintenant sur mon périphérique exécutant l'API 25, l'icône Android verte par défaut s'affiche et non pas mon icône.

c'est mon manifeste

<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">

et ce sont les fichiers créés par le studio d'actifs image

 enter image description here

Est-ce juste un bug d'Android Studio ou ai-je oublié quelque chose?

18
tyczj

J'ai eu le même problème et je l'ai résolu en renommant mon répertoire mipmap-anydpi en mipmap-anydpi-v26

Apparemment, le fichier ic_launcher.xml confond les anciennes versions d’Android, ce qui le cache de tous, sauf de O. De toute façon, mes icônes fonctionnent désormais sur toutes les versions (jusqu’au SDK 11, au moins).

31
String

La solution consiste à avoir mipmap-anydpi-v26/ic_launcher.xml pour les icônes adaptatives applicables aux API de niveau 26 et supérieur et pour les autres niveaux d'API, mettez ic_launcher.png (Remarque: pas ic_launcher.xml) dans tous les dossiers mimpap.


Explication :

Voici le problème de base mipmap-anydpi prévalent sur tous les autres mipmap-*. Donc, si une ressource est trouvée dans mipmap-anydpi, elle aura toujours la préférence. Désormais, mipmap-anydpi-v26 est un filtre au-dessus de ce filtre indiquant que les ressources de mipmap-anydpi-v26 seront toujours sélectionnées, quelle que soit la densité des périphériques uniquement si le niveau de l'API est égal ou supérieur à 26 (Oreo).

Maintenant, votre manifeste a Android:icon="@mipmap/ic_launcher"

Si votre appareil est doté d'une API de niveau 26 ou supérieur, Android choisira d'utiliser mipmap-anydpi-v26/ic_launcher.xml et tout fonctionnera correctement.

Le problème survient lorsque le niveau de l'API est inférieur à 26. Statistiques Android recherchant une ressource nommée ic_launcher. Il n'ira jamais chercher dans mipmap-anydpi-v26 en raison d'une contrainte de niveau d'API. Ensuite, il cherchera la ressource dans mipmap-anydpi et si ce n’est pas le cas, la ressource de densité réelle, par exemple. mipmap-mdpi

Ensuite, vous ne pouvez pas donner ic_launcher.xml à des appareils Android inférieurs à sdk 26 car il ne sait pas ce que sont les icônes adaptatives.

La solution consiste donc à avoir mipmap-anydpi-v26/ic_launcher.xml pour les icônes adaptatives applicable aux API de niveau 26 et supérieur et pour les autres niveaux d'API, mettez ic_launcher.png (Remarque: pas ic_launcher.xml) dans tous les dossiers mimpap.

10
Aniket Thakur

Si cela ne fonctionne toujours pas, vérifiez votre schéma XML, si vous utilisez l'importation automatique à partir d'Android Studio, cela ne fonctionnera pas, cela devrait être/apk/res/Android. Voici le code:

<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
louis bui