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 display-mask
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
Context
contexto
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
Context
contexto
Um contexto da atividade atual.
Retorna
DisplayMask
A nova máscara de exibição.
getBoundingRects
public List<Rect> getBoundingRects()
Retorna uma lista de Rect
s, sendo cada um deles o retângulo delimitador de uma área não funcional na tela.
Retorna
List<Rect>
Uma lista de Rect
s delimitadores, um para cada área da máscara de exibição.
getBoundingRectsForRotation
public List<Rect> getBoundingRectsForRotation(int rotation)
Retorna uma lista de Rect
s com relação à rotação, sendo cada um deles o retângulo delimitador de uma área não funcional na tela.
Parâmetros
int
rotação
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 Rect
s 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.