显示掩码 API

表示无法用于显示内容的显示区域。

Surface Duo SDK 中的 API 与 Surface Duo 设备交互,当应用在其他设备上运行时不应调用这些 API。 在调用这些 API 之前,应检查应用是否在 Surface Duo 设备上运行。 使用 IsDualScreenDevice 代码片段执行此检查。

DisplayMask 已更新,可根据应用上下文返回一个相对于显示指标的边框。 这将影响应用在单个屏幕上运行与跨两个屏幕运行时的 API 行为。 (在任何时候创建视图的服务都属于这两类服务之一。)

  • 在单个屏幕上运行时:

    • 窗口和显示指标与该单个显示器相关。
    • DisplayMask 返回一个空列表。 它不会与窗口相交。
  • 当跨两个屏幕运行时:

    • 窗口和显示指标与两个显示器相关,包括显示掩码。
    • DisplayMask 边框将标识硬件铰链下与应用窗口相关的区域(DisplayMask = 铰链掩码矩形)。

    有关详细信息,请参阅 Surface Duo 博客

提示

display-mask 包仅在 Surface Duo 上运行。

请考虑使用 Jetpack 窗口管理器访问在其他制造商(以及 Surface Duo)的可折叠设备上运行的设备无关型 API。

使用 display-mask更新 gradle 文件以使用这些 API。

import com.microsoft.device.display.DisplayMask

方法

静态方法

方法 说明
fromResourcesRect(Context context) 根据 config_mainBuiltInDisplayMaskRect 创建显示掩码。
fromResourcesRectApproximation(Context context) 根据 config_mainBuiltInDisplayMaskRectApproximation(这是掩码最接近的矩形基近似值)创建显示掩码。

对象方法

方法 说明
getBoundingRects() 返回矩形列表,每个矩形都是显示器上非功能区域的边框。
getBoundingRectsForRotation(int rotation) 返回相对于旋转的矩形列表,每个矩形都是显示器上非功能区域的边框。
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_0Surface.ROTATION_90Surface.ROTATION_180Surface.ROTATION_270

返回

List<Rect>

边界 Rect 列表,每个显示掩码区域各有一个。

getBounds

public Region getBounds()

返回掩码的边界区域。

可能有多个掩码,在这种情况下,返回的 Region 将是非连续的,如果不首先与它相交,它的边框将没有意义。

返回

Region

掩码的边界区域。 坐标相对于内容视图的左上角,以像素为单位。