Ocultar a barra de navegação

Esta lição descreve como ocultar a barra de navegação, que foi introduzida no Android 4.0 (nível 14 da API).

Embora esta lição se concentre em ocultar a barra de navegação, projete seu app para ocultar a barra de status ao mesmo tempo, conforme descrito em Ocultar a barra de status. Ocultar as barras de navegação e de status, mantendo-as prontamente acessíveis, permite que o conteúdo use todo o espaço da tela, proporcionando uma experiência do usuário mais imersiva.

barras do sistema

Figura 1. Barra de navegação.

Ocultar a barra de navegação

É possível ocultar a barra de navegação usando a flag SYSTEM_UI_FLAG_HIDE_NAVIGATION. Este snippet oculta a barra de navegação e a barra de status:

Kotlin

window.decorView.apply {
    // Hide both the navigation bar and the status bar.
    // SYSTEM_UI_FLAG_FULLSCREEN is only available on Android 4.1 and higher, but as
    // a general rule, you should design your app to hide the status bar whenever you
    // hide the navigation bar.
    systemUiVisibility = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN
}

Java

View decorView = getWindow().getDecorView();
// Hide both the navigation bar and the status bar.
// SYSTEM_UI_FLAG_FULLSCREEN is only available on Android 4.1 and higher, but as
// a general rule, you should design your app to hide the status bar whenever you
// hide the navigation bar.
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
              | View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);

Observe o seguinte:

  • Nessa abordagem, tocar em qualquer lugar da tela faz com que a barra de navegação (e de status) reapareça e permaneça visível. A interação do usuário apaga as sinalizações.
  • Depois que as sinalizações forem apagadas, o app vai precisar redefini-las se você quiser ocultar as barras novamente. Consulte Responder a mudanças de visibilidade da IU para ver uma discussão sobre como detectar mudanças de visibilidade da IU para que seu app possa responder de maneira adequada.
  • Onde você define as sinalizações da IU faz toda a diferença. Se você ocultar as barras de sistema no método onCreate() da sua atividade e o usuário pressionar "Início", as barras do sistema reaparecerão. Quando o usuário reabrir a atividade, onCreate() não será chamado, então as barras do sistema permanecerão visíveis. Se você quiser que as mudanças na IU do sistema persistam enquanto o usuário entra e sai da atividade, defina sinalizações de interface em onResume() ou onWindowFocusChanged().
  • O método setSystemUiVisibility() só terá efeito se a visualização chamada estiver visível.
  • Navegar para fora da visualização faz com que as flags definidas com setSystemUiVisibility() sejam apagadas.

Fazer o conteúdo aparecer por trás da barra de navegação

No Android 4.1 e em versões mais recentes, é possível definir o conteúdo do aplicativo para que ele apareça atrás da barra de navegação para que ele não seja redimensionado conforme a barra de navegação é ocultada e exibida. Para fazer isso, use SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION. Também pode ser necessário usar SYSTEM_UI_FLAG_LAYOUT_STABLE para ajudar o app a manter um layout estável.

Ao usar essa abordagem, é sua responsabilidade garantir que partes críticas da IU do app não sejam cobertas pelas barras do sistema. Para mais discussões sobre esse tópico, consulte a lição Como ocultar a barra de status.