Значок устаревшего изображения не отображается при использовании адаптивного значка
Я просто конвертировал значок своего приложения для совместимости с анимированными значками android o с помощью Image Asset Studio
в студии Android.
когда я запускаю свой проект сейчас на своем устройстве, использующем API 25 Я получаю значок зеленого андроида по умолчанию, а не мой значок.
это мой манифест
<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 или мне что-то не хватает?
Ответы
Ответ 1
У меня была такая же проблема, и я решил ее переименовать в каталог mipmap-anydpi
на mipmap-anydpi-v26
.
По-видимому, файл ic_launcher.xml
смущает старые версии Android, и это скрывает его от всех, кроме O. Во всяком случае, мои значки теперь работают на всех версиях (по крайней мере, до SDK 11).
Ответ 2
Решение состоит в том, чтобы 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 или более (Oreo).
Теперь у вас есть android:icon="@mipmap/ic_launcher"
Если ваше устройство имеет уровень API 26 или выше, Android выберет mipmap-anydpi-v26/ic_launcher.xml
, и все будет хорошо.
Проблема возникает, когда уровень API меньше 26. Статистика Android ищет ресурс с именем ic_launcher
. Он никогда не пойдет и не выполнит поиск в mipmap-anydpi-v26
из-за ограничения уровня API. Затем он будет искать ресурс в mipmap-anydpi
, а если его там нет, то фактический ресурс плотности, например. mipmap-mdpi
.
Далее, вы не можете отдать ic_launcher.xml
на устройства с Android меньше SDK 26, потому что он не знает, что такое адаптивные значки.
Поэтому решение состоит в том, чтобы mipmap-anydpi-v26/ic_launcher.xml
для адаптивных значков, применимых для уровня API 26 и выше, а также для других уровней API, поместить ic_launcher.png
(Примечание: не ic_launcher.xml) во все папки mimpap.
Ответ 3
Я столкнулся с той же проблемой и решил, как показано ниже.
Поместите ваши ic_launcher.xml
и ic_launcher_round.xml
в mipmap-anydpi-v26 (убедитесь, что у вас не должно быть ic_launcher.png/jpg
или ic_launcher_round.png/jpg
в одной папке).
Поместите ваш ic_launcher.png
в mipmap-hdpi/mdpi/xhdpi/xxhdpi/xxxhdpi (убедитесь, что в этих же папках не должно быть ic_launcher.xml
и ic_launcher_round.xml
).
Делая это, вы не получите никаких ошибок при создании/запуске проекта.
Надеюсь, это поможет кому-то, кто такой же вопрос...
Ответ 4
Если все еще не работает, проверьте свою 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>