Reduzir o brilho das barras do sistema

Esta lição descreve como escurecer as barras do sistema (ou seja, as barras de status e navegação) no Android 4.0 (API de nível 14) e versões mais recentes. O Android não oferece uma maneira integrada de escurecer as barras do sistema em versões anteriores.

Quando você usa essa abordagem, o conteúdo não é redimensionado, mas os ícones nas barras do sistema recuam visualmente. Assim que o usuário toca na barra de status ou na área da barra de navegação da tela, as duas barras ficam totalmente visíveis. A vantagem dessa abordagem é que as barras ainda estão presentes, mas os detalhes delas ficam ocultos, criando uma experiência imersiva sem sacrificar o acesso fácil a elas.

Escurecer as barras de status e navegação

Você pode escurecer as barras de status e navegação usando a flag SYSTEM_UI_FLAG_LOW_PROFILE da seguinte maneira:

Kotlin

// This example uses decor view, but you can use any visible view.
activity?.window?.decorView?.apply {
    systemUiVisibility = View.SYSTEM_UI_FLAG_LOW_PROFILE
}

Java

// This example uses decor view, but you can use any visible view.
View decorView = getActivity().getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_LOW_PROFILE;
decorView.setSystemUiVisibility(uiOptions);

Assim que o usuário toca na barra de status ou de navegação, a sinalização é apagada, fazendo com que as barras não fiquem esmaecidas. Depois que a sinalização for apagada, seu app precisará redefini-la para escurecer as barras novamente.

A Figura 1 mostra uma imagem da galeria com a barra de navegação esmaecida. Observe que o app Galeria oculta completamente a barra de status, mas não a esmaece. A barra de navegação (lado direito da imagem) tem pontos brancos fracos para representar os controles de navegação:

barras do sistema

Figura 1. Barras do sistema escurecidas.

A Figura 2 mostra a mesma imagem da galeria, mas com as barras do sistema exibidas:

barras do sistema

Figura 2. Barras do sistema visíveis.

Revelar as barras de status e navegação

Se você quiser limpar programaticamente as flags definidas com setSystemUiVisibility(), faça o seguinte:

Kotlin

activity?.window?.decorView?.apply {
    // Calling setSystemUiVisibility() with a value of 0 clears
    // all flags.
    systemUiVisibility = 0
}

Java

View decorView = getActivity().getWindow().getDecorView();
// Calling setSystemUiVisibility() with a value of 0 clears
// all flags.
decorView.setSystemUiVisibility(0);