Вырез в дисплее — это область на некоторых устройствах, которая выступает за пределы поверхности экрана. Он обеспечивает изображение от края до края, одновременно предоставляя место для важных датчиков на передней панели устройства.


Android поддерживает вырезы в экране на устройствах под управлением Android 9 (уровень API 28) и выше. Однако производители устройств также могут поддерживать вырезы в экране на устройствах под управлением Android 8.1 или ниже.
На этой странице описывается, как реализовать поддержку устройств с вырезами в Compose, включая работу с областью выреза — то есть с прямоугольником от края до края на поверхности дисплея, содержащим вырез.
Случай по умолчанию
Приложения, ориентированные на API уровня 34 или ниже, или Activity, которые не вызывают enableEdgeToEdge , по умолчанию не будут отображаться в области выреза, если приложение не отображает данные в системной панели, содержащей вырез на экране.
Приложения, ориентированные на API уровня 35 или выше на устройствах под управлением Android 15 или выше, или действия, вызывающие enableEdgeToEdge , отображаются в области выреза.
Другими словами, LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT , LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES и LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER интерпретируются как LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS для неплавающих окон в приложениях, ориентированных на API уровня 35 или выше, на устройствах под управлением Android 15 или выше.
Обрабатывайте информацию о вырезах вручную.
Необходимо обрабатывать информацию, выделяемую из области, чтобы она не закрывала важный текст, элементы управления или интерактивные элементы, требующие точного распознавания касаний (чувствительность к касаниям в области выреза может быть ниже). При обработке вырезов не следует жестко задавать высоту строки состояния, так как это может привести к перекрытию или обрезке содержимого. Вместо этого обрабатывайте вырезы одним из следующих способов:
Использование
WindowInsets.displayCutout,WindowInsets.safeContentилиWindowInsets.safeDrawingДоступ к объекту
Pathдля вырезания осуществляется с помощьюLocalView.current.rootWindowInsets.displayCutout
Для Compose мы рекомендуем использовать displayCutout , safeContent или safeDrawing для обработки отступов при компоновке элементов. Такой подход позволяет учитывать отступы при отображении там, где это необходимо, или игнорировать их там, где они не требуются.
Canvas(modifier = Modifier.fillMaxSize().windowInsetsPadding(WindowInsets.displayCutout)) { drawRect(Color.Red, style = Stroke(2.dp.toPx())) }
Рекомендуем вам
- Примечание: текст ссылки отображается, когда JavaScript отключен.
- Вставки окон в Compose
- Модификаторы графики
- Стиль абзаца