API da máscara de exibição

Representa a área da tela que não é funcional para a exibição de conteúdo.

As APIs no SDK do Surface Duo interagem com o dispositivo Surface Duo e não devem ser chamadas quando seu aplicativo está sendo executado em outros dispositivos. Antes de chamar essas APIs, você deve verificar se seu aplicativo está em execução em um dispositivo Surface Duo. Use o snippet de código isDualScreenDevice para executar essa verificação.

DisplayMask foi atualizado a fim de retornar um retângulo delimitador relativo às métricas da tela e baseado no contexto do aplicativo. Isso afeta como a API se comporta quando o aplicativo está em execução em apenas uma tela em comparação com a execução distribuída em duas telas. (Um serviço que cria uma exibição em qualquer ponto se enquadra em uma dessas duas categorias.)

  • Ao executar em apenas uma tela:

    • As métricas da tela e do Windows são relativas a essa tela única.
    • DisplayMask retorna uma lista vazia. Ela não fará uma interseção com a janela.
  • Ao executar de maneira distribuída em duas telas:

    • As métricas da tela e do Windows são relativas às duas telas, incluindo a máscara de exibição.
    • O retângulo delimitador de DisplayMask identificará a área sob a dobradiça do hardware em relação à janela do aplicativo (DisplayMask = retângulo da máscara da dobradiça).

    Para obter mais informações, confira o Blog do Surface Duo.

Dica

O pacote display-mask é executado somente no Surface Duo.

Considere o uso do Gerenciador de Janelas do Jetpack para acessar uma API agnóstica de dispositivo que funciona em dispositivos dobráveis de outros fabricantes (bem como no Surface Duo).

Atualize o arquivo gradle com o pacote para usar essas APIs.

import com.microsoft.device.display.DisplayMask

Métodos

Métodos estáticos

Método Descrição
fromResourcesRect(Context context) Cria a máscara de exibição de acordo com config_mainBuiltInDisplayMaskRect.
fromResourcesRectApproximation(Context context) Cria a máscara de exibição de acordo com config_mainBuiltInDisplayMaskRectApproximation, que é a aproximação de base de retângulo mais próxima da máscara.

Métodos de objeto

Método Descrição
getBoundingRects() Retorna uma lista de Retângulos, sendo cada um deles o retângulo delimitador de uma área não funcional na tela.
getBoundingRectsForRotation(int rotation) Retorna uma lista de Retângulos com relação à rotação, sendo cada um deles o retângulo delimitador de uma área não funcional na tela.
getBounds() Retorna a região delimitadora da máscara.

Exemplo

Obtendo um retângulo da máscara de exibição

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)

Cria a máscara de exibição de acordo com config_mainBuiltInDisplayMaskRect.

Parâmetros

ContextContext

Um contexto da atividade atual.

Retorna

DisplayMask

A nova máscara de exibição.

fromResourcesRectApproximation

public static DisplayMask fromResourcesRectApproximation(Context context)

Cria a máscara de exibição de acordo com config_mainBuiltInDisplayMaskRectApproximation, que é a aproximação de base de retângulo mais próxima da máscara.

Parâmetros

ContextContext

Um contexto da atividade atual.

Retorna

DisplayMask

A nova máscara de exibição.

getBoundingRects

public List<Rect> getBoundingRects()

Retorna uma lista de Rects, sendo cada um deles o retângulo delimitador de uma área não funcional na tela.

Retorna

List<Rect>

Uma lista de Rects delimitadores, um para cada área da máscara de exibição.

getBoundingRectsForRotation

public List<Rect> getBoundingRectsForRotation(int rotation)

Retorna uma lista de Rects com relação à rotação, sendo cada um deles o retângulo delimitador de uma área não funcional na tela.

Parâmetros

intint

A máscara de rotação deve girar. Os valores possíveis são Surface.ROTATION_0, Surface.ROTATION_90, Surface.ROTATION_180, Surface.ROTATION_270

Retorna

List<Rect>

Uma lista de Rects delimitadores, um para cada área da máscara de exibição.

getBounds

public Region getBounds()

Retorna a região delimitadora da máscara.

Pode haver mais de uma máscara; nesse caso, o Region retornado não será contíguo e seu retângulo delimitador não significará nada se não houver uma intersecção primeiro.

Retorna

Region

A região delimitadora da máscara. As coordenadas são relativas ao canto superior esquerdo da exibição de conteúdo e em unidades de pixel.