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

Платформа 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 , чтобы гарантировать отсутствие визуального перекрытия содержимого и перекрытия жестов.
{% дословно %} {% endverbatim %} {% дословно %} {% endverbatim %}