О вырезах

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

Пример вырезки в портретном режиме
Рисунок 1. Пример выреза в портретном режиме.
Пример вырезки в альбомном режиме
Рисунок 2. Пример выреза в альбомном режиме.

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 или выше.

Обрабатывайте информацию о вырезах вручную.

Необходимо обрабатывать информацию, выделяемую из области, чтобы она не закрывала важный текст, элементы управления или интерактивные элементы, требующие точного распознавания касаний (чувствительность к касаниям в области выреза может быть ниже). При обработке вырезов не следует жестко задавать высоту строки состояния, так как это может привести к перекрытию или обрезке содержимого. Вместо этого обрабатывайте вырезы одним из следующих способов:

Для Compose мы рекомендуем использовать displayCutout , safeContent или safeDrawing для обработки отступов при компоновке элементов. Такой подход позволяет учитывать отступы при отображении там, где это необходимо, или игнорировать их там, где они не требуются.

Canvas(modifier = Modifier.fillMaxSize().windowInsetsPadding(WindowInsets.displayCutout)) {
    drawRect(Color.Red, style = Stroke(2.dp.toPx()))
}

{% verbatim %} {% endverbatim %} {% verbatim %} {% endverbatim %}