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-mask
visualizació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
Context
contexto
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
Context
contexto
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
int
rotació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.