О вырезах

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

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

Android поддерживает вырезы на дисплее на устройствах с Android 9 (уровень API 28) и выше. Однако производители устройств также могут поддерживать вырезы на дисплее на устройствах с Android 8.1 или ниже.

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

Случай по умолчанию

Приложения, ориентированные на API уровня 34 или ниже, или действия, не вызывающие 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()))
}

{% дословно %} {% endverbatim %} {% дословно %} {% endverbatim %} ,

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

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

Android поддерживает вырезы на дисплее на устройствах с Android 9 (уровень API 28) и выше. Однако производители устройств также могут поддерживать вырезы на дисплее на устройствах с Android 8.1 или ниже.

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

Случай по умолчанию

Приложения, ориентированные на API уровня 34 или ниже, или действия, не вызывающие 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()))
}

{% дословно %} {% endverbatim %} {% дословно %} {% endverbatim %}