Configurar manualmente a exibição de ponta a ponta

É possível ativar a tela de ponta a ponta no app chamando enableEdgeToEdge. Isso deve ser suficiente para a maioria dos apps. Este guia descreve como ativar o modo de tela cheia se o app precisar fazer isso sem usar enableEdgeToEdge.

Posicionar o app em tela cheia

Use WindowCompat.setDecorFitsSystemWindows(window, false) para posicionar o app atrás das barras do sistema, conforme mostrado no exemplo de código a seguir:

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)
  WindowCompat.setDecorFitsSystemWindows(window, false)
}

Java

@Override
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  WindowCompat.setDecorFitsSystemWindows(getWindow(), false);
}

Mudar a cor das barras do sistema

Ao operar em um layout de ponta a ponta, o app precisa mudar as cores das barras do sistema para que o conteúdo abaixo fique visível. Depois que o app realiza essa etapa, o sistema processa toda a proteção visual da interface do usuário no modo de navegação por gestos e no modo de botão.

  • Modo de navegação por gestos:o sistema aplica a adaptação dinâmica de cores, em que o conteúdo das barras do sistema muda de cor com base no conteúdo por trás delas. No exemplo abaixo, a alça na barra de navegação muda para uma cor escura quando está acima do conteúdo claro e para uma cor clara quando está acima do conteúdo escuro.
Figura 1. Mudanças de cor no modo de navegação por gestos.
  • Modo de botão:o sistema aplica uma tela translúcida atrás das barras do sistema (para o nível 29 da API ou mais recente) ou uma barra do sistema transparente (para o nível 28 da API ou versões anteriores).
Uma imagem mostrando barras do sistema translúcidas
Figura 2. Tela translúcida atrás das barras do sistema.
  • Cor do conteúdo da barra de status:controla a cor do conteúdo da barra de status, como o horário e os ícones.
Uma imagem mostrando a cor do conteúdo da barra de status
Figura 3. Cor do conteúdo da barra de status.

É possível editar o arquivo themes.xml para definir a cor da barra de navegação e, opcionalmente, definir a barra de status como transparente e a cor do conteúdo da barra de status como escura.

<!-- values-v29/themes.xml -->
<style name="Theme.MyApp">
  <item name="android:navigationBarColor">
     @android:color/transparent
  </item>

  <!-- Optional: set to transparent if your app is drawing behind the status bar. -->
  <item name="android:statusBarColor">
     @android:color/transparent
  </item>

  <!-- Optional: set for a light status bar with dark content. -->
  <item name="android:windowLightStatusBar">
    true
  </item>
</style>

Você pode usar a API WindowInsetsController diretamente, mas é altamente recomendável usar a biblioteca de suporte WindowInsetsControllerCompat sempre que possível. É possível usar a API WindowInsetsControllerCompat em vez de theme.xml para controlar a cor do conteúdo da barra de status. Para isso, use a função setAppearanceLightNavigationBars(), transmitindo true para mudar a cor do primeiro plano da navegação para uma cor clara ou false para reverter para a cor padrão.

Kotlin

val windowInsetsController =
      ViewCompat.getWindowInsetsController(window.decorView)

windowInsetsController?.isAppearanceLightNavigationBars = true

Java

WindowInsetsControllerCompat windowInsetsController =
      ViewCompat.getWindowInsetsController(getWindow().getDecorView());
if (windowInsetsController == null) {
    return;
}

windowInsetsController.setAppearanceLightNavigationBars(true);