Все, что мы знаем о темном режиме Android Q

Следующая версия Android от Google, Android 10 Q, будет включать общесистемный темный режим. Как приложения в Android Q будут работать с темными темами?

В нашем первый пост Подробно рассказывая об изменениях, которые мы обнаружили в полученной нами версии Android Q, находящейся в разработке, мы кратко рассказали о темном режиме, который всех взволновал. Напомним, что встроенный темный режим Google в Android Q можно включить с помощью новой опции «Темный режим» в настройках дисплея. Темный режим может быть всегда выключен, всегда включен или автоматически включаться ночью и отключаться утром. Темы темного режима для SystemUI (панель громкости, меню питания, панель быстрых настроек, уведомления), приложения «Настройки» и платформы (цвет акцента и т. д.).

Вверху: тёмный режим в Android Q на Google Pixel 3 XL. Внизу: Светлая тема в Android Pie на Google Pixel 2 XL.

Однако Google не просто хочет, чтобы системные элементы были темными. Они также работают над тем, чтобы все их собственные приложения поддерживали темный режим, когда пользователь нажимает переключатель. Приложения Google, такие как

Сообщения, Телефон, Контакты, Новости, Играть в игры, YouTube, Картыи многие другие были обновлены с помощью переключателей темного режима, ориентированных на пользователя, а другие приложения, такие как Гугл Хром все еще исправляют все недочеты перед Google I/O 2019. Google также начал поощрять сторонних разработчиков приложений использовать темные темы в своих приложениях, поскольку компания признает, что они отлично экономят время автономной работы (по крайней мере, на смартфонах с OLED-дисплеями).

Чтобы помочь разработчикам обновить свои приложения с поддержкой темного режима Android Q, Google предоставляет новую опцию разработчика, которая, похоже, заставляет все приложения переходить в темный режим. Эта опция не предназначена для пользователей, которые хотят использовать темный режим для всех вещей, поскольку системе сложно выбрать правильные цвета для всех приложений, у которых нет встроенного темного режима. К счастью, Google уже заложил основу для приложений с поддержкой темных режимов, и уже существует множество приложений, которые выглядят нормально, если в Android Q включена опция переопределения темного режима, даже если в приложении нет темного режима, ориентированного на пользователя. переключать. Вот коллекция скриншотов из 24 различных приложений, показывающих, как они выглядят, когда им навязывается темный режим с помощью переключателя переопределения темного режима в Android Q. Не каждое приложение будет выглядеть так хорошо, как я покажу вам ниже.

Реализация темного режима в Android Q

В уровне API 8 (Android 2.2 Froyo) Google представила -ночные квалификации для ресурсов. Разработчики приложений могут переключаться между дневным и ночным режимом, используя setNightMode в UiModeManager. Однако setNightMode требует, чтобы устройство находилось в режиме автомобиля или в режиме стыковки, если устройство имеет уровень API 22 или ниже. AppCompat v23.2 представил реализацию DayNight, позволяющую таким приложениям, как клиенты Reddit, автоматически переключаться между дневной и ночной темами в зависимости от времени суток с помощью AppCompatDeletegate.setDefaultNightMode(). Уровень API 28 (Android 9 Pie) сделал MODE_NIGHT_FOLLOW_SYSTEM (значение по умолчанию для setDefaultNightMode()) соответствующим пользовательской настройке системы в «Настройки» -> «Параметры разработчика» -> «Ночной режим». Google это работа над улучшения API DayNight в AppCompat, особенно в отношении «часто встречающихся проблем», таких как проблемы с WebView. Наконец, Google включил обнаружение ночного режима и имеет заблокированные приложения без MODIFY_DAY_NIGHT_MODE подпись/привилегированное разрешение в рамках Android Q. Последнее изменение означает, что приложения больше не могут изменять общесистемный ночной режим, что и позволило недавней ошибке в сообщениях сбить с толку пользователей в Android Pie.

Обновлять: Ан обновлять к AndroidX Библиотека поддержки упростит разработчикам автоматическое включение темных режимов в своих приложениях, когда устройство переходит в режим экономии заряда батареи.

Принудительное использование темного режима в Android Q

Такие приложения, как Snapchat, Slack, AOSP Email, AOSP Messaging, AOSP Dialer и многие другие, имеют квалификаторы ресурсов -night, даже если они не предоставляют пользователю возможности использовать приложение в ночном режиме. Другие приложения, которые не имеют жестко запрограммированных квалификаторов ресурсов -night, такие как Facebook и Instagram, могут выглядеть хорошо, а могут и не выглядеть хорошо с включенной переопределенной темной темой Android Q. Instagram выглядит хорошо, а Facebook требует много работы. По моим тестам, опция разработчика «Переопределить ночной режим» сильно отличается от инверсии цвета в настройках специальных возможностей — возможно, Google намерен использовать эту функцию, чтобы помочь разработчикам создавать темные режимы для своих приложений, пока доступны предварительные версии Android Q Developer Previews. непрерывный. Однако мы не будем точно знать, как работает эта функция, пока не будет выпущен исходный код для Android Q или пока Google не опубликует для нее документацию.

Переопределить темный режим в Android Q больше всего не работает в приложениях, использующих WebViews.

В "Стоимость цвета пикселяВ докладе, представленном Крисом Бейнсом и Аланом Вивереттом из Google, дуэт призывает разработчиков реализовывать темные темы посредством:

  • Использование API DayNight в AppCompat. Стандартные виджеты автоматически реагируют на изменения в ночном режиме, или вы также можете добавить переключатель в свое приложение.
  • Динамическое применение тем наложения во время выполнения с помощью вызова getTheme().applyStyle(). Более подробную информацию можно найти в этом предыдущем разговоре. здесь.
  • Структурирование вашего приложения с учетом использования атрибутов темы, таких как colorForeground, colorControlNormal, colorAccent и т. д.
  • Добавление квалификаторов -night для ваших ресурсов. Квалификаторы -night следует использовать для ресурсов, из которых сложно извлечь цвета темы.
  • Включите режим инвертированных цветов (Настройки -> Цвета -> Инверсия цвета), чтобы получить быстрое представление о том, как ваше приложение будет выглядеть в темном режиме. Если вы хотите сделать снимок экрана вашего приложения с инвертированными цветами, вы должны знать, что инверсия цвета не будет отображаться на скриншоте.

После выпуска темный режим Android Q будет распространяться на собственные приложения Google, но мы надеемся, что сторонние приложения быстро адаптируют темные темы в свои приложения. Кроме того, мы надеемся, что больше приложений автоматически переключатся на ночные темы, когда пользователь включает общесистемную настройку. На данный момент единственное приложение, которое я видел, которое автоматически меняет темы при включении общесистемного темного режима Android Q, — это Google Contacts. Посмотрим, чем все обернется через пару месяцев, когда выйдет Android Q, но всем разработчикам, читающим это: примите темную сторону!

При участии участника LineageOS Джои Риццоли.