Можно ли получить поддержку темного режима Android для значков приложений?
Я пробую использовать поддержку темного режима для Android 10 для своего приложения. Я могу работать со всеми другими вещами в темном режиме, кроме значка запуска приложений.
Для справки я использовал ссылку ниже
https://developer.android.com/guide/topics/ui/look-and-feel/darktheme
Я знаю, что такого упоминания об изменении значка приложения при смене темы День / Ночь нет.
Просто для подтверждения, вам нужно, чтобы все ваши данные были включены, можно ли будет изменить значок приложения в соответствии с изменением темы с обычного на темный и наоборот.
Заранее спасибо.
8 ответов
Вы проверяли раздел " Темы и стили " в документации?
В ваших темах и стилях не следует использовать жестко заданные цвета или значки, предназначенные для использования в светлой теме. Вместо этого вы должны использовать атрибуты темы (предпочтительно) или ресурсы с указанием ночи.
Вот два наиболее важных атрибута темы, о которых следует знать:
?android:attr/textColorPrimary
Это цвет текста общего назначения. Он почти черный в светлой теме и почти белый в темной теме. Он содержит отключенное состояние.
?attr/colorControlNormal
Цвет значка общего назначения. Он содержит отключенное состояние.
Итак ?android:attr/textColorPrimary
а также ?attr/colorControlNormal
будет меняться в зависимости от темы (черный -> бело-белый -> черный). Я предполагаю, что мы можем установить эти цвета какandroid:tint
свойство для достижения темной / белой темы для векторных иконок. Минус в том, что ваши значки должны быть только черно-белыми.
Чтобы перейти в темный режим для значков в Android:
- Создайте отдельную папку ресурсов с именем values-night
- Внутри папки values-night определите вашу ночную тему (например, theme.xml)
- Определите все желаемые цвета в темном режиме внутри theme.xml
- Теперь внутри вашего значка для рисования определите атрибут оттенка значка следующим образом:
-
<vector android:height="24dp" android:tint="?attr/colorPrimaryDark" android:viewportHeight="24" android:viewportWidth="24" android:width="24dp"
- Используя приведенный выше код, цвет значка изменится в зависимости от цветов, определенных в темах темного и светлого режима в вашем проекте.
Фотографий:
Думаю, возможно, просто лаунчер не поддерживает его отображение.
Кстати, я создал новый цветовой ресурс в
values-night
и
values
, например:
<!-- values-night/colors.xml -->
<color name="icon_background">#000000</color>
<!-- values/colors.xml -->
<color name="icon_background">#FFFFFF</color>
Затем установите цвет фона в значок приложения:
<!-- mipmap/ic_launcher.xml -->
...
<background android:drawable="@color/icon_background" />
...
<!-- mipmap/ic_launcher_round.xml -->
...
<background android:drawable="@color/icon_background" />
...
Значок приложения теперь изменяется при переключении темного режима..., но только для приложений более ярких (значок отображается в верхней части окна), но Lancher не обновляется... Я тестировал Android 11 на телефоне Pixel 4XL (с помощью Google Launcher).
Кто-нибудь еще?
Помимо значка приложения, можно изменить цвет других изображений:
Попробуйте использовать
android:drawableTint="@color/black"
ИЛИ
app:tint="@color/black"
с желаемым изображением.
PS: (Атрибут drawableTint используется только на уровне API 23 и выше)
Темный режим не поддерживается для значков приложений (значков запуска).
Причина этого:
Некоторые квалификаторы ресурсов, такие как локаль/плотность/код версии, не меняются при повседневном использовании, и поддерживается смена значков на них. Но мы не рекомендуем изменять значки и метки приложений на основе часто меняющихся параметров, и это не поддерживается в большинстве мест пользовательского интерфейса системы. Пользователи создают карту памяти между приложениями и соответствующими им значками/ярлыками. Частое их изменение мешает пользователю.
По этому поводу в Google зарегистрирована проблема, и решение таково:
Не исправить (предполагаемое поведение)
Трекер проблем: https://issuetracker.google.com/issues/147521650?pli=1 .
Попробуй добавить
mipmap-anydpi-v26
&
mipmap-night-anydpi-v26
значки в исходном коде. Я пытался добавить, но немного глючит. Теоретически иконки поддерживают темную тему XDВот пример
Что ж, вы можете использовать цвета ресурса ure. Добавьте вариант ночного режима (значения правой кнопкой мыши, New -> Values resource file, установите имя файла "colors" и квалификатор "Night mode". Вы можете сделать вариант drawable специально, если хотите.
Главный недостаток - нестабильность. Я не знаю, только ли это я, но у меня странное поведение в эмуляторе (извините, сейчас не могу протестировать на устройстве). Сразу после установки значок устанавливается в правильный режим, но когда вы меняете на другой, он не обновляется. Однако когда вы пытаетесь переместить значок, он использует текущую вариацию темы.