Вырез дисплея — это область на некоторых устройствах, которая выходит за пределы поверхности дисплея. Он обеспечивает удобство работы от края до края , обеспечивая при этом место для важных датчиков на передней панели устройства.
![Пример выреза в портретном режиме](https://developer.android.google.cn/static/develop/ui/compose/images/system/cutouts_example_portrait.png?authuser=9&hl=ru)
![Пример выреза в ландшафтном режиме](https://developer.android.google.cn/static/develop/ui/compose/images/system/cutouts_example_landscape.png?authuser=9&hl=ru)
Android поддерживает вырезы дисплея на устройствах под управлением Android 9 (уровень API 28) и выше. Однако производители устройств также могут поддерживать вырезы дисплея на устройствах под управлением Android 8.1 или более ранней версии.
На этой странице описывается, как реализовать поддержку устройств с вырезами в Compose, в том числе как работать с областью выреза , то есть прямоугольником от края до края на поверхности дисплея, содержащим вырез.
Случай по умолчанию
По умолчанию вырезы дисплея включены в информацию о вставках окон. Из-за этого ваше приложение не будет отображать области вырезов дисплея, если вы будете следовать руководству по созданию полного приложения.
Например, когда вы используете Modifier.windowInsetsPadding(WindowInsets.safeContent)
или Modifier.windowInsetsPadding(WindowInsets.safeDrawing)
, ваше приложение автоматически не будет рисовать в областях, где находится вырез. WindowInsets.safeContent
и WindowInsets.safeDrawing
содержат информацию о вырезе дисплея и не будут рисовать там, где находится вырез устройства.
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) WindowCompat.setDecorFitsSystemWindows(window, false) setContent { Box(Modifier.windowInsetsPadding(WindowInsets.safeContent)) { // Any composable inside here will avoid drawing behind cutouts } } }
Чтобы дополнительно настроить это поведение, вам необходимо самостоятельно обработать информацию о вырезе.
Обработка информации о вырезе вручную
Обработать вырезы можно любым из следующих способов:
Использование
WindowInsets.displayCutout
Настройка в манифесте темы с помощью
android:windowLayoutInDisplayCutoutMode
Программная установка параметра в
Window
с помощьюwindow.attributes.layoutInDisplayCutoutMode
Доступ к объекту
Path
выреза с помощьюLocalView.current.rootWindowInsets.displayCutout
Для Compose рекомендуется установить для windowLayoutInDisplayCutoutMode
значение default
в вашей общей теме, а затем использовать WindowInsets.displayCutout
для обработки вставок в ваших составных объектах:
Canvas(modifier = Modifier.fillMaxSize().windowInsetsPadding(WindowInsets.displayCutout)) { drawRect(Color.Red, style = Stroke(2.dp.toPx())) }
Этот подход позволяет вам учитывать заполнение displayCutout
там, где это необходимо, или игнорировать его там, где оно не требуется.
В качестве альтернативы вы можете применить те же настройки, которые описаны в документации Views Cutout , установив для темы действия android:windowLayoutInDisplayCutoutMode
другой параметр или установив атрибут окна с помощью window.attributes.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT
. Однако затем режим отключения применяется ко всему действию и не может управляться для каждого отдельного компонуемого объекта.
Чтобы соблюдать вырез дисплея в некоторых составных объектах, но не в других, используйте WindowInset.displayCutout
. Этот API позволяет вам получить доступ к информации о вырезе, когда это необходимо.
Лучшие практики
При работе с вырезами для дисплея учитывайте следующее:
- Помните о размещении важных элементов пользовательского интерфейса. Не позволяйте области выреза закрывать важный текст, элементы управления или другую информацию.
- Не размещайте и не расширяйте какие-либо интерактивные элементы, требующие тонкого распознавания, в области выреза. Чувствительность к прикосновению может быть ниже в области выреза.
- При следовании указаниям от края до края информация о вырезе включается во вставки
safeDrawing
/safeContent
. - Там, где это возможно, используйте
Modifier.windowInsetsPadding(WindowInsets.safeDrawing)
чтобы определить подходящее дополнение для применения к вашему содержимому. Избегайте жесткого кодирования высоты строки состояния, так как это может привести к перекрытию или обрезке содержимого.
Проверьте, как ваш контент отображается с вырезами
Обязательно протестируйте все экраны и возможности вашего приложения. Если возможно, протестируйте устройства с разными типами вырезов. Если у вас нет устройства с вырезом, вы можете смоделировать распространенные конфигурации выреза на любом устройстве или эмуляторе под управлением Android 9 или более поздней версии, выполнив следующие действия:
- Включите параметры разработчика .
- На экране «Параметры разработчика» прокрутите вниз до раздела «Рисование» и выберите « Имитировать дисплей с вырезом» .
- Выберите тип выреза.
Рисунок 3 . Используйте параметры разработчика, чтобы проверить, как отображается ваш контент.
Рекомендуется для вас
- Примечание. Текст ссылки отображается, когда JavaScript отключен.
- Вставки окон в Compose
- Графические модификаторы
- Стиль абзаца