Вырезы в Compose

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

Пример выреза в портретном режиме
Рисунок 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()))
}

Проверьте, как ваш контент отображается с вырезами

Обязательно протестируйте все экраны и возможности вашего приложения. Если возможно, протестируйте устройства с разными типами вырезов. Если у вас нет устройства с вырезом, вы можете смоделировать распространенные конфигурации выреза на любом устройстве или эмуляторе под управлением Android 9 или более поздней версии, выполнив следующие действия:

  1. Включите параметры разработчика .
  2. На экране «Параметры разработчика» прокрутите вниз до раздела «Рисование» и выберите «Имитировать дисплей с вырезом» .
  3. Выберите тип выреза.
    имитация выреза дисплея в эмуляторе
    Рисунок 3 . Используйте параметры разработчика , чтобы проверить, как отображается ваш контент.
{% дословно %} {% дословно %} {% дословно %} {% дословно %}