Android Studio Image Asset Launcher Icon Прозрачный цвет фона

Вы можете подумать, что этот вопрос является дубликатом этот один. Но с тех пор Android Studio была обновлена, и приведенное там решение больше не работает.

Я пытаюсь установить логотип своего приложения, используя изображение в студии Android. Это связано с тем, что если я помещу логотип своего приложения непосредственно в drawable или mipmap, это вызовет много проблем, таких как: если его размер большой, произойдет сбой приложения, если устройство работает на oreo, логотип не будет отображаться, а ic_launcher по умолчанию отображается и т. д.

При попытке установить логотип моего приложения с помощью графического ресурса я столкнулся с проблемой: я не могу сделать фон логотипа приложения прозрачным.

У меня есть логотип png, сделанный в фотошопе, и я хочу установить его в качестве логотипа моего приложения, и мне не нужен фон, но ресурс изображения студии Android не предоставляет возможности удалить фон. Я попробовал следующие решения от Google:

это и это

но ни один из них не работал для меня.

Пробные решения:

  1. Установив форму на none
  2. удалив файл ic_launcher_background из его местоположения по умолчанию
  3. Пробовал на разных устройствах

Ни одна из этих работ... пожалуйста, помогите мне. Любая помощь будет оценена.


person Jaydip Kalkani    schedule 01.04.2018    source источник
comment
снова импортируйте то же изображение в фоновый слой и установите его размер меньше, чем первое изображение   -  person Akram    schedule 04.06.2018


Ответы (4)


В Android 8.0 Oreo (уровень API 26) представлены адаптивные значки запуска, которые состоят из из двух слоев: передний план и фон. В руководстве по дизайну материалов указано, что фоновый слой должен быть непрозрачным в Android O и более поздних версиях , как вы можете видеть в нижней части следующей цитаты. Таким образом, значок адаптивной панели запуска для Android 8.0 или более поздней версии должен иметь как минимум непрозрачный цвет фона, если targetSdkVersion вашего приложения 26 или выше.

https://material.io/guidelines/style/icons.html#icons-icons-for-android

Иконки для Android

Android O и выше

Значки Android O представляют ваше приложение на экранах «Домой» и «Все приложения». Следующие рекомендации описывают, как значки могут получать уникальную визуальную обработку, анимацию и поведение.

...

Спецификации слоя

Иконки состоят из двух слоев: переднего плана и фона. Каждый слой может анимироваться и обрабатываться независимо от другого слоя.

Передний план (параллакс прокрутки)

  • 108 x 108 dp
  • 72dp замаскированный раздел
  • Рекомендуется прозрачность (необязательно)

Фон (более тонкий параллакс)

  • 108 X 108 dp
  • 72dp замаскированный раздел
  • Должен быть непрозрачным

Обходной путь для 7.1 или ниже

Хотя значки программы запуска для версии 8.0 или более поздней версии должны иметь непрозрачный цвет фона, другие устаревшие значки программы запуска для версии 7.1 или более ранней могут вернуться к прозрачному цвету фона, если вы можете опустить круглые значки запуска из вашего приложения.

  1. Сначала создайте значки панели запуска (адаптивные и старые). Он создаст адаптивные значки запуска и устаревшие значки запуска. Все они изначально имеют непрозрачный цвет фона.
  2. После этого создайте Значки запуска (только для старых версий). Это перезапишет только существующие устаревшие значки запуска, как вы можете видеть на втором снимке экрана ниже. Если вы установите shape на none, они будут иметь прозрачный цвет фона.
  3. Удалить папку res/mipmap/ic_laucher_round в окне проекта.
  4. Откройте AndroidManifest.xml и удалите атрибут android:roundIcon="@mipmap/ic_launcher_round" из элемента application.

ШАГ 1

На левой панели выше следующие XML-файлы определяют значки адаптивной панели запуска для Android 8.0 или более поздней версии.

  • mipmap-anydpi-v26/ic_launcher.xml
  • mipmap-anydpi-v26/ic_launcher_round.xml

Как видно на правой панели, они ссылаются на следующие рисуемые XML-файлы.

  • Drawable/ic_launcher_background.xml
  • Drawable-v24/ic_launcher_foreground.xml

ШАГ 2


Обновление №1:

В Android 8.0 или более поздней версии цвет фона значков панели запуска может быть прозрачным, как показано на снимках экрана Android 8.1 (Nexus 5X). Пример приложения «NoAdaptive» не имеет ресурсов для значков адаптивной панели запуска в папке mipmap-anydpi-v26, а другое приложение «Adaptive» имеет ресурс.

Главный экран в Android 8.1 (Nexus 5X)Экран


Обновление №2:

Хотя цвет фона значка запуска может быть прозрачным в Android 8.0 или выше, это зависит от пользовательского приложения запуска. Некоторые приложения запуска преобразуют ваш устаревший значок в непрозрачный адаптивный значок.

На устройстве Nexus 5X (Android 8.1)

Приложением запуска по умолчанию является Google Now Launcher, согласно имени пакета com.google.android.launcher. Цвет фона может быть прозрачным, как на скриншотах обновления №1.

В эмуляторе Nexus 5 (Android 8.1)

Приложением запуска по умолчанию является Pixel Launcher. , согласно имени пакета com.google.android.apps.nexuslauncher. Цвет фона может быть прозрачным на экране Recents, как показано на снимках экрана ниже:

  • непрозрачный на главном экране
  • прозрачный на экране Recents
  • непрозрачный на экране Все приложения

Домашняя страница, экраны AllApps и недавние в эмуляторе Nexus 5

Непрозрачный белый фон в некоторых приложениях запуска

Эти приложения GMS имеют закрытый исходный код:

  • com.google.android.launcher Средство запуска Google Now
  • com.google.android.apps.nexuslauncher Пиксельная программа запуска

Напротив, приложения AOSP имеют открытый исходный код. Большинство приложений запуска в Android основаны на исходном коде следующих приложений запуска:

  • com.android.launcher
  • com.android.launcher2
    • Launcher2 (original package name)
  • com.android.launcher3
    • Launcher3 (for Android 5.0 Lollipop or higher)

Исходный код Launcher3

В ветке git oreo-release Launcher3 В LauncherIcons.java есть метод wrapToAdaptiveIconDrawable, который заключает устаревший значок запуска в адаптивный значок запуска.

/**
 * If the platform is running O but the app is not providing AdaptiveIconDrawable, then
 * shrink the legacy icon and set it as foreground. Use color drawable as background to
 * create AdaptiveIconDrawable.
 */
static Drawable wrapToAdaptiveIconDrawable(Context context, Drawable drawable, float scale) {
    if (!(FeatureFlags.LEGACY_ICON_TREATMENT && Utilities.isAtLeastO())) {
        return drawable;
    }
    try {
        if (!(drawable instanceof AdaptiveIconDrawable)) {
            AdaptiveIconDrawable iconWrapper = (AdaptiveIconDrawable)
                    context.getDrawable(R.drawable.adaptive_icon_drawable_wrapper).mutate();
            FixedScaleDrawable fsd = ((FixedScaleDrawable) iconWrapper.getForeground());
            fsd.setDrawable(drawable);
            fsd.setScale(scale);
            return (Drawable) iconWrapper;
        }
    } catch (Exception e) {
        return drawable;
    }
    return drawable;
}

Флаг FeatureFlags.LEGACY_ICON_TREATMENT определен в FeatureFlags.java:

// When enabled, icons not supporting {@link AdaptiveIconDrawable} will be wrapped in this class.
public static final boolean LEGACY_ICON_TREATMENT = true;

Таким образом, цвет фона устаревшего значка запуска зависит от этого флага, и он может быть непрозрачным в некоторых приложениях запуска, таких как Pixel Launcher.

Цвет фона

Если флаг установлен на true, новый адаптивный значок запуска создается с R.drawable.adaptive_icon_drawable_wrapper, а существующий устаревший значок становится его передним слоем. Фоновый слой можно рисовать: @color/legacy_icon_background согласно файл XML ресурса:

<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
    <background android:drawable="@color/legacy_icon_background"/>
    <foreground>
        <com.android.launcher3.graphics.FixedScaleDrawable />
    </foreground>
</adaptive-icon>

Цвет legacy_icon_background определен в colors.xml

<color name="legacy_icon_background">#FFFFFF</color>

Таким образом, цвет фона становится белым.

person qtmfld    schedule 05.04.2018
comment
Итак, нет официального или хитрого способа сделать иконку приложения с прозрачным фоном в Android 8.0 и выше? - person Jaydip Kalkani; 05.04.2018
comment
Я обдумал ваше предложение и пересмотрел свой ответ. Я надеюсь, что это работает для вас. - person qtmfld; 09.04.2018
comment
+1 за ваши огромные усилия, чувак. Я удалил ресурсы из mipmap-anydpi-v26 и пробую приложение на эмуляторе Nexus 5 с Android 8.1. но он все еще дает тот же результат. с белым фоном в моем логотипе круглой формы. Кстати большое спасибо за вашу большую поддержку. - person Jaydip Kalkani; 09.04.2018
comment
Спасибо за голосование, и я очень ценю щедрость от вас. Да, ты прав. Некоторые приложения запуска могут сделать белый фон для устаревшего значка запуска. Я проверил исходный код текущих приложений запуска AOSP и снова обновил свой ответ. - person qtmfld; 13.04.2018
comment
Отличный ответ. В любом случае, я не тестировал свое приложение в соответствии с вашим обновлением № 2, но это отличное объяснение. - person Jaydip Kalkani; 13.04.2018
comment
Я думаю, что это отличный ответ, и я тронут усилиями и интеллектуальным анализом этой темы, которая очень важна для всех нас с коммерческой точки зрения. И это несмотря на то, что ответ таков: прозрачность никоим образом не будет работать при определенных условиях. Это очень полезная информация. Тема превращается в стратегическую коммерческую политическую проблему будущего Android-лаунчеров. Я не вижу ограничений в амбициях адаптивных иконок с прозрачным фоном. Я надеюсь, что политика изменится на коммерческую функцию прозрачных иконок. Возможно только в изменении в лаунчерах. - person Jan Bergström; 22.05.2019
comment
просто сделайте это в eclipse и переместите в папки androidstudio. очень просто - person Ehsan; 02.11.2020

В Android 5.0 значок всегда имел непрозрачный фон, пока я не создал прозрачный файл.

  1. «Файл» > «Создать» > «Изображение».
  2. Повернитесь к Launcher Icons (Adaptive and Legacy) в Icon Type.
  3. Выберите Image в Asset Type и выберите свое изображение в поле Path (вкладка Foreground Layer).
  4. Создайте или загрузите ниже PNG-файл с прозрачным фоном размером 512x512 пикселей (это размер ic_launcher-web.png).
  5. На вкладке Background Layer выберите Image в Asset Type и загрузите прозрачный фон из шага 4.
  6. На вкладке Legacy выберите Yes для всех Generate, None для Shape.
  7. Во вкладках Foreground Layer и Background Layer можно изменить размер обрезки.

Хотя вы увидите черный фон за изображением в окне Preview, после нажатия Next, Finish и компиляции приложения вы увидите прозрачный фон в Android 5, Android 8.

Вот прозрачное изображение:

введите описание изображения здесь

person CoolMind    schedule 28.11.2018
comment
нет... вокруг значка черный контур, что выглядит странно - person Shikhar; 19.06.2019
comment
@ShikharJaiswal, это странно. Не могли бы вы выложить изображение и написать название устройства, версию ОС? - person CoolMind; 20.06.2019

Попробуйте этот способ, который сработал для меня:

  1. Сначала создайте значок запуска (Adaptive and Legacy) из Image Asset: выберите image для фонового слоя и измените его размер на 0% или 1%, а на вкладке «Устаревшие» установите shape на none.

  2. Удалите папку res/mipmap/ic_laucher_round в окне проекта и откройте AndroidManifest.xml и удалите атрибут android:roundIcon="@mipmap/ic_launcher_round" из элемента application.

  3. Удалить ic_launcher.xml из mipmap-anydpi-v26.

Примечание. Некоторые устройства, такие как Nexus 5X (Android 8.1), автоматически добавляют белый фон и ничего не могут сделать.

person Alireza K    schedule 07.04.2019

Если я не ошибаюсь, у вас есть png-файл размером 512x512 px из файла Photoshop, и вы хотите сделать из него логотип для всех необходимых папок (mipmap-xxxhdpi на mipmap-mdpi).

Вы также можете использовать это после создания значка с помощью Android Studio. Я предпочитаю создавать свои иконки с помощью Photoshop.

Я использую этот сайт после создания значка размером 512x512px в Photoshop. У вас могут быть значки не только для Android, но и для приложений iPhone и т. д., и это бесплатно. Иконки правильно масштабируются, называются и помещаются в папки mipmap в папке android в zip-файле. Вы просто распаковываете файл после загрузки, копируете и вставляете. Я сделал по крайней мере 50 иконок, и у меня никогда не было проблем.

person Thracian    schedule 07.04.2018
comment
Вы пробовали свое приложение на устройстве с oreo после создания значка с помощью этого сайта? Показывает ли он прозрачный фон в oreo? - person Jaydip Kalkani; 07.04.2018
comment
В эмуляторе так. Но у меня нет настоящего устройства с Android 8.0. Вывод с этого сайта — это папки MIP-карт и значки, которые вы создаете вручную. Он просто масштабирует, называет и создает необходимые папки без каких-либо действий. - person Thracian; 07.04.2018
comment
В результате вы получаете папки mipmap, вы не храните файл png в папке assets. - person Thracian; 07.04.2018
comment
Нет, это не работает идеально на oreo. Он показывает белый фон в логотипе, в то время как я только что загрузил логотип png с прозрачным фоном на сайте. - person Jaydip Kalkani; 07.04.2018