Android Studio Image Asset Launcher Иконка Прозрачный Цвет фона

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

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

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

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

это и это

но ничего из этого не помогло мне.

Испытанные решения:

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

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

3 ответа

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

https://material.io/guidelines/style/icons.html

Иконки для Android

Android O и выше

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

...

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

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

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

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

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

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

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

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

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

ШАГ 1

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

  • мипмап-anydpi-V26/ic_launcher.xml
  • мипмап-anydpi-V26/ic_launcher_round.xml

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

  • рисуем / ic_launcher_background.xml
  • вытяжка-V24/ic_launcher_foreground.xml

ШАГ 2


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

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

Главный экран в Android 8.1 (Nexus 5XНедавний экран в 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, Цвет фона может быть прозрачным на экране " Последние", как на скриншотах ниже:

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

Экран Home, AllApps и Recents в эмуляторе Nexus 5

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

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

  • com.google.android.launcher Google Now Launcher
  • com.google.android.apps.nexuslauncher Pixel Launcher

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

  • com.android.launcher
  • com.android.launcher2
    • Launcher2 (оригинальное название пакета)
  • com.android.launcher3
    • Launcher3 (для Android 5.0 Lollipop или выше)

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

В git-ветке oreo-релиз 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>

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

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

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

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

Вот прозрачное изображение (доступно для скачивания):

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

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

  1. Сначала создайте значок запуска (Adaptive and Legacy) из объекта изображения: выберите 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), автоматически добавляют белый фон и ничего не могут делать.

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

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

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

Другие вопросы по тегам