Вырез на экране – это область на некоторых устройствах, которая заходит на поверхность экрана. Это позволяет сделать экран безрамочным, оставив место для важных датчиков на передней панели устройства.
Вырезы на экране поддерживаются на устройствах с Android 9 (уровень API 28) и более поздними версиями ОС. Однако производители устройств могут поддерживать вырезы на экране и на устройствах с Android 8.1 или более ранней версией.
На этой странице описано, как реализовать поддержку устройств с вырезами в Compose, в том числе как работать с областью выреза – прямоугольником на поверхности дисплея, содержащим вырез.
Вариант по умолчанию
Приложения, предназначенные для целевого уровня API 34 или ниже, или Activity, которые не вызывают enableEdgeToEdge, по умолчанию не будут отрисовываться в области выреза, если только приложение не отрисовывается в системной строке, содержащей вырез на экране.
Приложения, поддерживающие целевой уровень API 35 или выше на устройствах с Android 15 или более поздней версии, а также Activity, вызывающие 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
- Модификаторы графики
- Стиль абзаца