Sobre os cortes

Um corte da tela é uma área em alguns dispositivos que se estende até a superfície da tela. Ele permite uma experiência de ponta a ponta, deixando espaço para sensores importantes na parte frontal do dispositivo.

Exemplo de recorte no modo retrato
Figura 1. Exemplo de corte no modo retrato
Exemplo de corte no modo paisagem
Figura 2. Exemplo de corte no modo paisagem

O Android oferece suporte a cortes da tela em dispositivos com o Android 9 (nível 28 da API) e versões mais recentes. No entanto, os fabricantes de dispositivos também podem oferecer suporte a cortes da tela em dispositivos com o Android 8.1 ou versões anteriores.

Esta página descreve como implementar suporte para dispositivos com cortes no Compose, incluindo como trabalhar com a área de corte, ou seja, o retângulo de ponta a ponta na superfície da tela que contém o corte.

Caso padrão

Os apps destinados ao nível 34 da API ou versões anteriores ou atividades que não chamam enableEdgeToEdge não serão renderizados na região de corte por padrão, a menos que o app seja renderizado em uma barra de sistema que contenha o corte da tela.

Os apps destinados ao nível 35 da API ou versões mais recentes em dispositivos com o Android 15 ou versões mais recentes ou atividades que chamam enableEdgeToEdge são renderizados na região de corte.

Em outras palavras, LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT, LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES e LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER são interpretados como LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS para janelas não flutuantes em apps destinados ao nível 35 da API ou versões mais recentes em dispositivos com o Android 15 ou versões mais recentes.

Processar informações de corte manualmente

Você precisa processar informações de corte para evitar que a área de corte obscureça textos, controles ou elementos interativos importantes que exigem reconhecimento de toque fino (a sensibilidade ao toque pode ser menor na área de corte). Ao processar cortes, não codifique a altura da barra de status, porque isso pode causar sobreposição ou corte de conteúdos. Em vez disso, processe cortes de uma das seguintes maneiras:

Para o Compose, recomendamos que você use displayCutout, safeContent ou safeDrawing para processar encartes de corte nos elementos combináveis. Essa abordagem permite respeitar o padding de corte da tela quando necessário ou ignorá-lo quando não for.

Canvas(modifier = Modifier.fillMaxSize().windowInsetsPadding(WindowInsets.displayCutout)) {
    drawRect(Color.Red, style = Stroke(2.dp.toPx()))
}