В 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 или более ранней могут вернуться к прозрачному цвету фона, если вы можете опустить круглые значки запуска из вашего приложения.
- Сначала создайте значки панели запуска (адаптивные и старые). Он создаст адаптивные значки запуска и устаревшие значки запуска. Все они изначально имеют непрозрачный цвет фона.
- После этого создайте Значки запуска (только для старых версий). Это перезапишет только существующие устаревшие значки запуска, как вы можете видеть на втором снимке экрана ниже. Если вы установите
shape
на none
, они будут иметь прозрачный цвет фона.
- Удалить папку
res/mipmap/ic_laucher_round
в окне проекта.
- Откройте AndroidManifest.xml и удалите атрибут
android:roundIcon="@mipmap/ic_launcher_round"
из элемента application
.
На левой панели выше следующие 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
Обновление №1:
В Android 8.0 или более поздней версии цвет фона значков панели запуска может быть прозрачным, как показано на снимках экрана Android 8.1 (Nexus 5X). Пример приложения «NoAdaptive» не имеет ресурсов для значков адаптивной панели запуска в папке mipmap-anydpi-v26
, а другое приложение «Adaptive» имеет ресурс.
Обновление №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
- непрозрачный на экране Все приложения
Непрозрачный белый фон в некоторых приложениях запуска
Эти приложения 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