Esta lição descreve como ocultar a barra de status em diferentes versões do Android. Ocultar a barra de status (e, opcionalmente, a barra de navegação) permite que o conteúdo use mais espaço de exibição, proporcionando uma experiência do usuário mais imersiva.
A Figura 1 mostra um app com uma barra de status visível:
![barras do sistema](https://developer.android.com/static/images/training/status_bar_show.png?authuser=5&hl=pt)
Figura 1. Barra de status visível.
A Figura 2 mostra um app com uma barra de status oculta. Observe que a barra de ação também está oculta. Nunca mostre a barra de ação sem a barra de status.
![barras do sistema](https://developer.android.com/static/images/training/status_bar_hide.png?authuser=5&hl=pt)
Figura 2. Barra de status oculta.
Ocultar a barra de status no Android 4.0 e em versões anteriores
Você pode ocultar a barra de status no Android 4.0 (nível 14 da API) e versões anteriores definindo
flags WindowManager
. Isso pode ser feito de maneira programática ou
configurando um tema de atividade no arquivo de manifesto do app. Definir um tema de atividade no arquivo de manifesto
do seu app é a abordagem preferencial caso a barra de status precise permanecer
oculta no app. No entanto, você pode substituir programaticamente
o tema se quiser. Por exemplo:
<application ... android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen" > ... </application>
As vantagens de usar um tema de atividade são as seguintes:
- É mais fácil de manter e menos propenso a erros do que definir uma sinalização programaticamente.
- Isso resulta em transições mais suaves da interface, porque o sistema tem as informações necessárias para renderizar a interface antes de instanciar a atividade principal do app.
Como alternativa, você pode definir programaticamente as sinalizações WindowManager
.
Essa abordagem facilita ocultar e mostrar a barra de status à medida que o usuário interage com
o app:
Kotlin
class MainActivity : Activity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // If the Android version is lower than Jellybean, use this call to hide // the status bar. if (Build.VERSION.SDK_INT < 16) { window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN) } setContentView(R.layout.activity_main) } ... }
Java
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // If the Android version is lower than Jellybean, use this call to hide // the status bar. if (Build.VERSION.SDK_INT < 16) { getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); } setContentView(R.layout.activity_main); } ... }
Quando você define as sinalizações WindowManager
(seja por um tema de atividade ou
de maneira programática), elas permanecem em vigor até que sejam apagadas pelo app.
Você pode usar
FLAG_LAYOUT_IN_SCREEN
para definir o layout da atividade para usar a mesma área de tela disponível quando você ativou
FLAG_FULLSCREEN
. Isso evita que o
conteúdo seja redimensionado quando a barra de status for ocultada e exibida.
Ocultar a barra de status no Android 4.1 e em versões mais recentes
Você pode ocultar a barra de status no Android 4.1 (API de nível 16) e versões mais recentes
usando setSystemUiVisibility()
.
O setSystemUiVisibility()
define sinalizações de interface no
nível da visualização individual. Essas configurações são agregadas ao nível da janela. O uso de
setSystemUiVisibility()
para definir sinalizações de interface
oferece um controle mais granular sobre as barras do sistema do que o uso de
flags WindowManager
. Este snippet oculta a barra de status:
Kotlin
// Hide the status bar. window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_FULLSCREEN // Remember that you should never show the action bar if the // status bar is hidden, so hide that too if necessary. actionBar?.hide()
Java
View decorView = getWindow().getDecorView(); // Hide the status bar. int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN; decorView.setSystemUiVisibility(uiOptions); // Remember that you should never show the action bar if the // status bar is hidden, so hide that too if necessary. ActionBar actionBar = getActionBar(); actionBar.hide();
Observe o seguinte:
- Depois que as sinalizações da interface forem apagadas (por exemplo, ao sair da atividade), seu 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 emonResume()
ouonWindowFocusChanged()
. - O método
setSystemUiVisibility()
só tem 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 status
No Android 4.1 e versões mais recentes, é possível definir que o conteúdo do aplicativo apareça por trás
da barra de status para que ele não seja redimensionado conforme a barra é ocultada e exibida.
Para fazer isso, use
SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
.
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 essenciais da IU do app (por exemplo, os controles integrados em um aplicativo do Maps) não sejam cobertas pelas barras do sistema. Isso pode deixar seu app inutilizável. Na maioria dos casos, você pode
processar isso adicionando o atributo android:fitsSystemWindows
ao arquivo de layout XML, definido como
true
. Isso ajusta o padding do ViewGroup
pai
para deixar espaço para as janelas do sistema e é suficiente para a maioria dos aplicativos.
No entanto, em alguns casos, pode ser necessário modificar o padding padrão para conseguir o layout
desejado para o app. Para manipular diretamente a forma como o
conteúdo é apresentado em relação às barras do sistema, que ocupam um espaço conhecido como
"encartes de conteúdo da janela", modifique fitSystemWindows(Rect insets)
.
O método fitSystemWindows()
é chamado pela
hierarquia de visualização quando os encartes de conteúdo de uma janela mudam, para permitir que a janela
ajuste o conteúdo. Ao modificar esse método, você pode processar os
encartes (e, portanto, o layout do app) como quiser.