Поделиться через


API маски экрана

Представляет область отображения, которая не используется для отображения содержимого.

Интерфейсы API в пакете SDK для Surface Duo взаимодействуют только с устройством Surface Duo и не должны вызываться, когда приложение выполняется на других устройствах. Прежде, чем обращаться к этим API, убедитесь, что приложение выполняется именно на устройстве Surface Duo. Для такой проверки используйте фрагмент кода IsDualScreenDevice.

DisplayMask теперь возвращает ограничивающий прямоугольник относительно метрик дисплея на основе контекста приложения. Это изменяет поведение API в зависимости от того, выполняется ли приложение на одном экране или в режиме отображения на двух экранах. (Служба, которая создала представление, в любом случае относится к одной из этих двух категорий.)

  • При работе на одном экране справедливо следующее:

    • Метрики окон и дисплея связаны с одним используемым экраном.
    • DisplayMask возвращает пустой список. Эта область не пересекается с окном.
  • При работе приложения в режиме растягивания на два экрана справедливо следующее:

    • Метрики окна и дисплея связаны с обоими экранами, включая маску экрана.
    • Ограничивающий прямоугольник DisplayMask определяет область под механизмом складывания устройства в координатах относительно окна приложения (прямоугольник DisplayMask совпадает с углом разворота).

    Дополнительные сведения см. в блоге о Surface Duo.

Совет

Пакет display-mask работает только на Surface Duo.

Мы рекомендуем использовать Jetpack Window Manager для доступа к не зависящему от устройства API, который работает на складных устройствах от других производителей (а также на Surface Duo).

Обновите файл gradle, включив в него пакет display-mask для использования этих API.

import com.microsoft.device.display.DisplayMask

Методы

Статические методы

Метод Описание
fromResourcesRect(Context context) Создает маску экрана в соответствии с параметрами config_mainBuiltInDisplayMaskRect.
fromResourcesRectApproximation(Context context) Создает маску экрана в соответствии с параметрами config_mainBuiltInDisplayMaskRectApproximation, которая является ближайшим прямоугольным приближением к области маски.

Методы объекта

Метод Описание
getBoundingRects() Возвращает список объектов Rect, каждый из которых является ограничивающим прямоугольником для нефункциональной области на экране.
getBoundingRectsForRotation(int rotation) Возвращает список объектов Rect относительно угла вращения, каждый из которых является ограничивающим прямоугольником для нефункциональной области на экране.
getBounds() Возвращает ограничивающую область маски.

Пример

Получение прямоугольника маски экрана

val displayMask: DisplayMask = DisplayMask.fromResourcesRect(this)
val masks: List<Rect> = displayMask.getBoundingRectsForRotation(rotation) // pass in orientation (test with 0)
var mask = Rect()
if (!masks.isEmpty()) {
    mask = masks[0]
    // layout around masked area
}

Открытые методы

fromResourcesRect

public static DisplayMask fromResourcesRect(Context context)

Создает маску экрана в соответствии с параметрами config_mainBuiltInDisplayMaskRect.

Параметры

Contextконтекст

Контекст для текущего действия.

Возвращает

DisplayMask

Новая маска экрана.

fromResourcesRectApproximation

public static DisplayMask fromResourcesRectApproximation(Context context)

Создает маску экрана в соответствии с параметрами config_mainBuiltInDisplayMaskRectApproximation, которая является ближайшим прямоугольным приближением к области маски.

Параметры

Contextконтекст

Контекст для текущего действия.

Возвращает

DisplayMask

Новая маска экрана.

getBoundingRects

public List<Rect> getBoundingRects()

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

Возвращает

List<Rect>

Список объектов Rect (ограничивающий прямоугольник), по одному для каждой области маски экрана.

getBoundingRectsForRotation

public List<Rect> getBoundingRectsForRotation(int rotation)

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

Параметры

intповорот

Угол поворота для маски. Принимает значения Surface.ROTATION_0, Surface.ROTATION_90, Surface.ROTATION_180 или Surface.ROTATION_270.

Возвращает

List<Rect>

Список объектов Rect (ограничивающий прямоугольник), по одному для каждой области маски экрана.

getBounds

public Region getBounds()

Возвращает ограничивающую область маски.

Рамок может быть несколько, и тогда возвращаемый объект Region будет несплошным, а его ограничивающий прямоугольник не будет иметь никакого смысла без нужного пересечения.

Возвращает

Region

Ограничивающая область маски. Координаты указываются относительно левого верхнего угла представления содержимого в пикселях.