A exibição de ponta a ponta permite que o app mostre a interface por trás das barras de sistema (barra de status, barra de legenda e barra de navegação) para oferecer uma experiência do usuário mais imersiva. Se você segmentar dispositivos com Android 15 (nível 35 da API) ou mais recente, o modo de ponta a ponta será aplicado por padrão.
Para mostrar o conteúdo de ponta a ponta corretamente em todas as versões do Android, siga estas etapas de configuração. Sem essas etapas, o app pode renderizar cores sólidas atrás das barras de sistema ou não animar o conteúdo de forma síncrona com as transições do teclado na tela (IME).
1. Ativar a exibição de ponta a ponta
Para ativar o modo de ponta a ponta em versões anteriores do Android, chame
enableEdgeToEdge() no método Activity.onCreate():
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
...
}
Por padrão, o enableEdgeToEdge() torna as barras de sistema transparentes, exceto no modo de navegação com três botões, em que aplica uma máscara translúcida à barra de navegação para melhorar o contraste. A cor dos ícones do sistema e do scrim se adapta ao tema claro ou escuro do sistema.
2. Configurar windowSoftInputMode
Defina android:windowSoftInputMode="adjustResize" na entrada AndroidManifest.xml da sua atividade. Essa configuração permite que seu app receba encartes de IME,
permitindo ajustar o layout com padding quando o teclado na tela
aparece ou desaparece.
<!-- In your AndroidManifest.xml file: -->
<activity
android:name=".ui.MainActivity"
android:label="@string/app_name"
android:windowSoftInputMode="adjustResize"
android:theme="@style/Theme.MyApplication"
android:exported="true">
...
</activity>
3. Processar sobreposições usando encartes
Depois que a renderização de ponta a ponta é ativada, alguns elementos de conteúdo e da interface do app podem ser renderizados atrás das barras de sistema. Para evitar que elementos críticos ou interativos sejam obscurecidos por barras de sistema ou se sobreponham a gestos do sistema, é necessário processar encartes.
As margens descrevem partes da tela que se cruzam com a interface do sistema ou com gestos do sistema. Os principais tipos de encartes a serem considerados para exibição de ponta a ponta são:
- Encartes de barras de sistema:representam áreas onde as barras de sistema são exibidas. Use-as para evitar que a interface seja obscurecida pelas barras de sistema.
- Encaixes de corte da tela:representam áreas em que há um corte físico (como um entalhe de câmera) na tela do dispositivo.
No Compose, é possível processar encartes usando réguas, modificadores de padding ou modificadores de tamanho de encarte. Consulte Sobre encartes de janela para orientações detalhadas.
Temas avançados
Considere o seguinte para casos de uso mais avançados de ponta a ponta.
Modo imersivo
Alguns conteúdos, como vídeos ou mapas, se beneficiam de uma experiência totalmente imersiva
em que as barras de sistema ficam ocultas. É possível ocultar as barras de sistema usando
WindowInsetsControllerCompat:
val windowInsetsController =
WindowCompat.getInsetsController(window, window.decorView)
// Hide the system bars.
windowInsetsController.hide(WindowInsetsCompat.Type.systemBars())
// Show the system bars.
windowInsetsController.show(WindowInsetsCompat.Type.systemBars()) For example, use either `Scaffold`,
Cores e ícones da barra de sistema
Ao ir de ponta a ponta, o plano de fundo do app pode ficar visível atrás das barras de sistema. Por isso, talvez seja necessário ajustar as cores dos ícones das barras de sistema para melhorar o contraste.
Para mudar os ícones da barra de status para claro ou escuro, use WindowInsetsControllerCompat:
// Set status bar icons to dark
WindowCompat.getInsetsController(window, window.decorView)
.isAppearanceLightStatusBars = true
// Set status bar icons to light
WindowCompat.getInsetsController(window, window.decorView)
.isAppearanceLightStatusBars = false
Proteção da barra de sistema
Embora o enableEdgeToEdge() forneça barras de sistema transparentes ou translúcidas por padrão, talvez seja necessário personalizar isso. Consulte as diretrizes de design das barras de sistema do Android e de design de ponta a ponta para decidir quando usar barras transparentes ou translúcidas.
Para deixar a barra de navegação com três botões totalmente transparente em vez de translúcida, desative a imposição de contraste:
window.isNavigationBarContrastEnforced = false
Para mais informações, consulte Sobre a proteção da barra de sistema.
Caixas de diálogo
Para mostrar caixas de diálogo em tela cheia de ponta a ponta, chame
WindowCompat.enableEdgeToEdge no método onStart() da caixa de diálogo:
class MyAlertDialogFragment : DialogFragment() {
override fun onStart(){
super.onStart()
dialog?.window?.let { WindowCompat.enableEdgeToEdge(it) }
}
...
}