Об оконных вставках

Платформа Android отвечает за отображение системного пользовательского интерфейса, такого как строка состояния и панель навигации. Этот системный пользовательский интерфейс отображается независимо от того, какое приложение использует пользователь.

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

Переход от края к краю, чтобы рисовать за системными панелями
Рис. 1. Переход от края к краю для рисования за системными полосами.

В Android 14 (уровень API 34) и более ранних версиях пользовательский интерфейс вашего приложения по умолчанию не отображается под системными панелями и не отображает вырезы.

В Android 15 (уровень API 35) и более поздних версиях ваше приложение отображается под системными панелями и вырезами дисплея, как только ваше приложение нацелено на SDK 35. Это обеспечивает более удобный пользовательский интерфейс и позволяет вашему приложению в полной мере использовать доступное ему пространство окна.

Отображение контента за системным пользовательским интерфейсом называется «от края до края» . На этой странице вы узнаете о различных типах вставок, о том, как работать от края до края и как использовать API-интерфейсы вставок для анимации вашего пользовательского интерфейса и обеспечения того, чтобы содержимое вашего приложения не было закрыто элементами системного пользовательского интерфейса.

Основы вставки

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

Размер системного пользовательского интерфейса и информация о том, где он расположен, задаются с помощью вставок .

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

Эти встроенные типы вставок Android доступны через WindowInsets :

WindowInsets.statusBars

Вставки, описывающие строки состояния. Это верхние панели пользовательского интерфейса системы, содержащие значки уведомлений и другие индикаторы.

WindowInsets.statusBarsIgnoringVisibility

Строка состояния вставляется, когда она видна. Если строки состояния в настоящее время скрыты (из-за входа в полноэкранный режим), то вставки основной строки состояния будут пустыми, но эти вставки будут непустыми.

WindowInsets.navigationBars

Вставки, описывающие панели навигации. Это панели системного пользовательского интерфейса слева, справа или снизу устройства, описывающие панель задач или значки навигации. Они могут меняться во время выполнения в зависимости от предпочтительного метода навигации пользователя и взаимодействия с панелью задач.

WindowInsets.navigationBarsIgnoringVisibility

Панель навигации вставляется, когда она видна. Если панели навигации в настоящее время скрыты (из-за входа в полноэкранный режим), то вставки основной панели навигации будут пустыми, но эти вставки будут непустыми.

WindowInsets.captionBar

Вставка, описывающая оформление окна пользовательского интерфейса системы, если оно находится в окне произвольной формы, например, верхняя строка заголовка.

WindowInsets.captionBarIgnoringVisibility

Строка заголовка вставляется, когда она видна. Если панели заголовка в настоящее время скрыты, то основные вставки панели заголовка будут пустыми, но эти вставки будут непустыми.

WindowInsets.systemBars

Объединение вставок системной панели, включающих строки состояния, панели навигации и строку заголовка.

WindowInsets.systemBarsIgnoringVisibility

Системная панель вставляется, когда она видна. Если системные панели в настоящее время скрыты (из-за входа в полноэкранный режим), то вставки основной системной панели будут пустыми, но эти вставки будут непустыми.

WindowInsets.ime

Вставки, описывающие количество места внизу, которое занимает программная клавиатура.

WindowInsets.imeAnimationSource

Вставки, описывающие объем места, которое занимала программная клавиатура до текущей анимации клавиатуры.

WindowInsets.imeAnimationTarget

Вставки, описывающие объем места, которое займет программная клавиатура после текущей анимации клавиатуры.

WindowInsets.tappableElement

Тип вставок, описывающих более подробную информацию о пользовательском интерфейсе навигации и указывающих объем пространства, в котором «нажатия» будут обрабатываться системой, а не приложением. Для прозрачных панелей навигации с навигацией с помощью жестов некоторые элементы приложения можно нажимать через пользовательский интерфейс системной навигации.

WindowInsets.tappableElementIgnoringVisibility

Вставки сенсорных элементов, когда они видимы. Если нажимаемые элементы в настоящее время скрыты (из-за входа в полноэкранный режим погружения), то вставки основных нажимаемых элементов будут пустыми, но эти вставки будут непустыми.

WindowInsets.systemGestures

Вставки представляют количество вставок, в которых система будет перехватывать жесты для навигации. Приложения могут вручную указать обработку ограниченного количества этих жестов с помощью Modifier.systemGestureExclusion .

WindowInsets.mandatorySystemGestures

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

WindowInsets.displayCutout

Вставки обозначают расстояние, необходимое для того, чтобы избежать перекрытия выреза дисплея (выемки или точечного отверстия).

WindowInsets.waterfall

Вставки представляют изогнутые области изображения водопада. Дисплей-водопад имеет изогнутые области по краям экрана, где экран начинает загибаться по бокам устройства.

Эти типы суммируются тремя «безопасными» типами вставок, которые гарантируют, что содержимое не будет скрыто:

Эти «безопасные» типы вставок защищают контент по-разному в зависимости от вставок базовой платформы:

  • Используйте WindowInsets.safeDrawing для защиты содержимого, которое не должно отображаться под каким-либо системным пользовательским интерфейсом. Это наиболее распространенное использование вставок: для предотвращения рисования содержимого, скрытого пользовательским интерфейсом системы (частично или полностью).
  • Используйте WindowInsets.safeGestures для защиты содержимого с помощью жестов. Это позволяет избежать конфликта системных жестов с жестами приложений (например, для нижних листов, каруселей или в играх).
  • Используйте WindowInsets.safeContent как комбинацию WindowInsets.safeDrawing и WindowInsets.safeGestures , чтобы обеспечить отсутствие визуального перекрытия содержимого и перекрытия жестов.
{% дословно %} {% дословно %} {% дословно %} {% дословно %}