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

В Android 14 (уровень API 34) и более ранних версиях пользовательский интерфейс вашего приложения по умолчанию не отображается под системными панелями и вырезами на экране.
На Android 15 (уровень API 35) и выше ваше приложение будет отображаться под системными панелями и вырезами на экране, как только приложение будет ориентировано на SDK 35. Это обеспечивает более плавный пользовательский интерфейс и позволяет вашему приложению в полной мере использовать доступное ему пространство окна.
Отображение контента за системным пользовательским интерфейсом называется «от края до края» . На этой странице вы узнаете о различных типах отступов, о том, как выполнять отступы от края до края, и как использовать API для анимации пользовательского интерфейса и обеспечения того, чтобы контент вашего приложения не был закрыт элементами системного пользовательского интерфейса.
Основные принципы вставки
Когда приложение занимает всю поверхность экрана, необходимо убедиться, что важный контент и взаимодействия не заслоняются системным пользовательским интерфейсом. Например, если кнопка расположена за панелью навигации, пользователь может не иметь возможности нажать на нее.
Размер системного пользовательского интерфейса и информация о его местоположении задаются с помощью параметров отступов (insets) .
Каждая часть системного интерфейса имеет соответствующий тип отступа, описывающий её размер и местоположение. Например, отступы для строки состояния определяют размер и положение строки состояния, а отступы для панели навигации — размер и положение панели навигации. Каждый тип отступа состоит из четырёх пиксельных измерений: сверху, слева, справа и снизу. Эти измерения определяют, насколько системный интерфейс отстоит от соответствующих сторон окна приложения. Следовательно, чтобы избежать перекрытия с этим типом системного интерфейса, интерфейс приложения должен иметь отступ на это значение.
Эти встроенные типы вставок Android доступны через WindowInsets :
Вставки с описанием строк состояния. Это верхние панели системного интерфейса, содержащие значки уведомлений и другие индикаторы. | |
Отступы строки состояния отображаются, когда она видна. Если строка состояния в данный момент скрыта (из-за перехода в полноэкранный режим), то отступы основной строки состояния будут пустыми, но эти отступы будут непустыми. | |
Вставки описывают панели навигации. Это системные панели пользовательского интерфейса слева, справа или снизу устройства, описывающие панель задач или значки навигации. Они могут изменяться во время выполнения в зависимости от предпочтительного метода навигации пользователя и его взаимодействия с панелью задач. | |
Отступы панели навигации отображаются, когда она видна. Если панели навигации в данный момент скрыты (из-за перехода в полноэкранный режим), то отступы основной панели навигации будут пустыми, но эти отступы будут непустыми. | |
Вставка с описанием оформления окна пользовательского интерфейса системы, если окно имеет произвольную форму, например, заголовок окна в верхней части экрана. | |
Отступы в строке подписи отображаются, когда она видна. Если в данный момент строки подписи скрыты, то основные отступы в строке подписи будут пустыми, но эти отступы будут непустыми. | |
Объединение элементов системной панели, включающих строку состояния, панель навигации и строку подписей. | |
Отступы системной панели отображаются, когда она видна. Если системные панели в данный момент скрыты (из-за перехода в полноэкранный режим), то отступы основной системной панели будут пустыми, но эти отступы будут непустыми. | |
На вставках показано, какое пространство снизу занимает программная клавиатура. | |
На вставках показано, какое пространство занимала программная клавиатура до начала текущей анимации клавиатуры. | |
Вставки описывают объем пространства, которое займет программная клавиатура после завершения текущей анимации клавиатуры. | |
Тип вставок, описывающих более подробную информацию о пользовательском интерфейсе навигации, указывающий на пространство, где «касания» будут обрабатываться системой, а не приложением. Для прозрачных панелей навигации с управлением жестами некоторые элементы приложения могут быть доступны для касания через пользовательский интерфейс навигации системы. | |
Отступы для элементов, на которые можно нажимать, сохраняются, когда они видны. Если элементы, на которые можно нажимать, в данный момент скрыты (из-за перехода в иммерсивный полноэкранный режим), то отступы для основных элементов, на которые можно нажимать, будут пустыми, но эти отступы будут непустыми. | |
Параметр "insets" определяет количество областей, в которых система будет перехватывать жесты для навигации. Приложения могут вручную указать обработку ограниченного количества таких жестов с помощью | |
Подмножество системных жестов, которые всегда будут обрабатываться системой и от которых нельзя отказаться с помощью | |
Вставки показывают необходимое расстояние, чтобы избежать перекрытия с вырезом в дисплее (выемкой или отверстием). | |
На вставках показаны изогнутые участки дисплея типа «водопад». Дисплей типа «водопад» имеет изогнутые участки вдоль краев экрана, где экран начинает обтекать боковые стороны устройства. |
Эти типы можно разделить на три «безопасных» типа вставок, которые гарантируют, что содержимое не будет перекрыто:
Эти «безопасные» типы вставок защищают контент различными способами в зависимости от используемых платформ:
- Используйте
WindowInsets.safeDrawingдля защиты содержимого, которое не должно отображаться под системным интерфейсом. Это наиболее распространенное использование отступов: предотвращение отображения содержимого, частично или полностью скрытого системным интерфейсом. - Используйте
WindowInsets.safeGesturesдля защиты контента, управляемого жестами. Это предотвратит конфликт системных жестов с жестами приложений (например, жестами для нижних панелей, каруселей или в играх). - Используйте
WindowInsets.safeContentкак комбинациюWindowInsets.safeDrawingиWindowInsets.safeGestures, чтобы гарантировать отсутствие визуального и жестового наложения контента.
Рекомендуем вам
- Примечание: текст ссылки отображается, когда JavaScript отключен.
- Компоненты материалов и компоновка
- Перенести
CoordinatorLayoutв Compose - Другие соображения