Esta lição descreve como ocultar a barra de status em diferentes versões do Android. Esconder a barra de status (e opcionalmente, a barra de navegação) permite que o conteúdo use mais o espaço de exibição, proporcionando assim uma experiência de usuário mais imersiva.
A Figura 1 mostra um aplicativo com uma barra de status visível:
Figure 1. Barra de estado visível.
A figura 2 mostra uma aplicação com uma barra de estado oculta. Note que a barra de acção também está oculta. Você nunca deve mostrar a barra de ação sem a barra de status.
Figure 2. Barra de status oculta.
Oculta a barra de status no Android 4.0 e inferior
Pode ocultar a barra de status no Android 4.0 (nível 14 da API) e inferior definindoWindowManager
bandeiras. Você pode fazer isso de forma programática ou definir um tema de atividade no arquivo de manifesto do seu aplicativo. Definir um tema de atividade no arquivo de manifesto da sua aplicação é a abordagem preferida se a barra de status deve sempre ser refeita na sua aplicação (embora estritamente falando, você poderia programar o tema se você quisesse). Por exemplo:
<application ... android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen" > ...</application>
As vantagens de usar um tema de actividade são as seguintes:
- É mais fácil de manter e menos susceptível a erros do que definir um sinalizador programmaticamente.
- Resulta em transições de IU mais suaves, porque o sistema tem a informação necessária para tornar a sua IU antes de instanciar a actividade principal do seu aplicativo.
Alternativamente, você pode programar WindowManager
flags.Esta abordagem torna mais fácil esconder e mostrar a barra de status enquanto o usuário interage com a sua aplicação:
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 WindowManager
flags (seja através de um tema de atividade ou programático), as flags permanecem em efeito a menos que a sua aplicação as limpe.
Você pode usarFLAG_LAYOUT_IN_SCREEN
para definir o layout da sua atividade para usar a mesma área de tela que está disponível quando você ativouFLAG_FULLSCREEN
. Isso impede que você redimensione o conteúdo quando a barra de status se esconde e mostra.
Oculte a barra de status no Android 4.1 e superior
Você pode ocultar a barra de status no Android 4.1 (nível 16 da API) e superior usando setSystemUiVisibility()
.setSystemUiVisibility()
define as bandeiras de IU no nível de visualização individual; essas configurações são agregadas ao nível da janela. UsandosetSystemUiVisibility()
para definir as bandeiras de IU dá-lhe mais controle granular sobre as barras do sistema do que usandoWindowManager
bandeiras. Este snippet esconde 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();
Note o seguinte:
- Once UI flags have been cleared (por exemplo, navegando longe da atividade), seu aplicativo precisa redefini-las se você quiser esconder as barras novamente.Veja Respondendo a Mudanças na Visibilidade da IU para saber como ouvir as mudanças na visibilidade da IU para que seu aplicativo possa responder de acordo.
- Onde você definir as bandeiras de IU faz a diferença. Se você ocultar as barras do sistema no método
onCreate()
da sua atividade e o usuário pressionar Home, as barras do sistema irão reaparecer. 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 a IU do sistema mude de topersist enquanto o usuário navega dentro e fora de sua atividade, defina as bandeiras de IU emonResume()
ouonWindowFocusChanged()
. - O método
setSystemUiVisibility()
só tem efeito se a vista de onde você a chama for visível. - Navegar longe da vista faz com que as bandeiras definidas com
setSystemUiVisibility()
sejam apagadas.
Aparecer conteúdo atrás da barra de status
No Android 4.1 e superior, você pode definir o conteúdo do seu aplicativo para aparecer atrás da barra de status, para que o conteúdo não seja redimensionado conforme a barra de status se esconde e mostra. Para fazer isso, use SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
.Você também pode precisar usar SYSTEM_UI_FLAG_LAYOUT_STABLE
para ajudar o seu aplicativo a manter o layout estável.
Quando você usa essa abordagem, torna-se sua responsabilidade garantir que partes críticas da IU do seu aplicativo (por exemplo, os controles embutidos em um aplicativo Mapas) não acabem sendo cobertos pelas barras de sistema. Isto pode tornar a sua aplicação inutilizável. Na maioria dos casos, você pode resolver isso adicionando o atributo android:fitsSystemWindows
ao seu arquivo de layout XML, definido como true
. Isto ajusta o padding do pai ViewGroup
para deixar espaço para as janelas do sistema. Isto é suficiente para a maioria das aplicações.
Em alguns casos, no entanto, você pode precisar modificar o padding padrão para obter o desiredlayout para a sua aplicação. Para manipular diretamente a forma como o conteúdo do yourcontent está disposto em relação às barras do sistema (que ocupam um espaço conhecido como “content insets” da janela), substitua fitSystemWindows(Rect insets)
.O método fitSystemWindows()
é chamado pela hierarquia de visualização quando os insets de conteúdo para uma janela foram alterados, para permitir que a janela ajuste o seu conteúdo de acordo. Substituindo este método, você pode manipular osinsets (e, portanto, o layout da sua aplicação) como quiser.