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