API de máscara de visualización

Representa el área de la pantalla que no es funcional para mostrar contenido.

Las API del SDK de Surface Duo interactúan con el dispositivo Surface Duo, y no deben recibir llamadas cuando tu aplicación se está ejecutando en otros dispositivos. Antes de llamar a estas API, tienes que comprobar si la aplicación se está ejecutando en un dispositivo Surface Duo. Use el fragmento de código IsDualScreenDevice para esta comprobación.

DisplayMask se ha actualizado para devolver un rectángulo delimitador relativo a las métricas de visualización basadas en el contexto de la aplicación. Esto afecta al comportamiento de la API cuando la aplicación se ejecuta en una sola pantalla frente a la ejecución distribuida en dos pantallas. (Un servicio que cree una vista en cualquier momento se encontrará en una de estas dos categorías).

  • Ejecución en una sola pantalla:

    • Las métricas de las ventanas y de visualización se relacionan con esa única pantalla.
    • DisplayMask devuelve una lista vacía. No se intersecará con la ventana.
  • Ejecución distribuida en dos pantallas:

    • Las métricas de las ventanas y de visualización se relacionan con ambas visualizaciones, incluida la máscara de visualización.
    • El rectángulo delimitador de DisplayMask identificará el área debajo de la bisagra de hardware en relación con la ventana de la aplicación (DisplayMask = rectángulo de la máscara de la bisagra).

    Para más información, consulta el blog de Surface Duo.

Sugerencia

El paquete display-mask solo se ejecuta en Surface Duo.

Considere la posibilidad de usar Window Manager de Jetpack para tener acceso a una API independiente del dispositivo que funcione en dispositivos doblado de otros fabricantes (así como en Surface Duo).

Actualice el archivo Gradle con el de paquete de display-maskvisualización de máscara para usar estas API.

import com.microsoft.device.display.DisplayMask

Métodos

Métodos estáticos

Método Descripción
fromResourcesRect(Context context) Crea la máscara de visualización según config_mainBuiltInDisplayMaskRect.
fromResourcesRectApproximation(Context context) Crea la máscara de visualización según config_mainBuiltInDisplayMaskRectApproximation, que es la aproximación de base rectangular más cercana de la máscara.

Métodos de objeto

Método Descripción
getBoundingRects() Devuelve una lista de Rects, donde cada uno es el rectángulo delimitador de un área no funcional de la pantalla.
getBoundingRectsForRotation(int rotation) Devuelve una lista de Rects con respecto a la rotación, donde cada uno es el rectángulo delimitador de un área no funcional de la pantalla.
getBounds() Devuelve la región delimitadora de la máscara.

Ejemplo

Obtención de un rectángulo de máscara de visualización

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
}

Métodos públicos

fromResourcesRect

public static DisplayMask fromResourcesRect(Context context)

Crea la máscara de visualización según config_mainBuiltInDisplayMaskRect.

Parámetros

Contextcontexto

Un contexto para la actividad actual.

Devuelve

DisplayMask

La nueva máscara de visualización.

fromResourcesRectApproximation

public static DisplayMask fromResourcesRectApproximation(Context context)

Crea la máscara de visualización según config_mainBuiltInDisplayMaskRectApproximation, que es la aproximación de base rectangular más cercana de la máscara.

Parámetros

Contextcontexto

Un contexto para la actividad actual.

Devuelve

DisplayMask

La nueva máscara de visualización.

getBoundingRects

public List<Rect> getBoundingRects()

Devuelve una lista de Rect, donde cada uno es el rectángulo delimitador de un área no funcional de la pantalla.

Devuelve

List<Rect>

Una lista de Rect delimitadores, uno para cada área de la máscara de visualización.

getBoundingRectsForRotation

public List<Rect> getBoundingRectsForRotation(int rotation)

Devuelve una lista de Rect con respecto a la rotación, donde cada uno es el rectángulo delimitador de un área no funcional de la pantalla.

Parámetros

introtación

La máscara de rotación debe girar. Los valores posibles son Surface.ROTATION_0, Surface.ROTATION_90, Surface.ROTATION_180, Surface.ROTATION_270.

Devuelve

List<Rect>

Una lista de Rect delimitadores, uno para cada área de la máscara de visualización.

getBounds

public Region getBounds()

Devuelve la región delimitadora de la máscara.

Puede haber más de una máscara, en cuyo caso el valor Region devuelto será no contiguo, y su rectángulo delimitador no tendrá sentido si no lo interseca primero.

Devuelve

Region

La región delimitadora de la máscara. Las coordenadas son relativas a la esquina superior izquierda de la vista de contenido y en unidades de píxeles.