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

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