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 o conteúdo ocupe mais espaço de exibição, proporcionando uma experiência de 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=2&hl=pt-br)
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=2&hl=pt-br)
Figura 2. Barra de status oculta.
Ocultar a barra de status no Android 4.0 e em versões anteriores
Para ocultar a barra de status no Android 4.0 (API de nível 14) e em versões anteriores,
WindowManager
. Você pode fazer isso de forma programática ou
a definição de um tema de atividade no arquivo de manifesto do app. A definição de um tema de atividade no
arquivo de manifesto é a abordagem preferida se a barra de status deve permanecer sempre
ocultas em seu aplicativo (embora seja possível substituir de forma programática as
se você quiser). 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 de interface mais suaves, 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
seu 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 sinalizações WindowManager
, seja por um tema de atividade ou
programaticamente), as sinalizações permanecem em vigor, a menos que sejam apagadas pelo aplicativo.
Você pode usar
FLAG_LAYOUT_IN_SCREEN
para definir o layout da atividade para usar a mesma área de tela disponível quando você as ativar
FLAG_FULLSCREEN
. Isso impede que seus
o conteúdo seja redimensionado quando a barra de status é ocultada e exibida.
Ocultar a barra de status no Android 4.1 e em versões mais recentes
Para ocultar a barra de status no Android 4.1 (API de nível 16) e versões mais recentes,
usando setSystemUiVisibility()
.
setSystemUiVisibility()
define sinalizações de IU em
o nível da vista individual essas configurações são agregadas ao nível da janela. Usando
setSystemUiVisibility()
para definir sinalizações de interface
oferece controle mais granular sobre as barras do sistema do que usar
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 do usuário forem apagadas (por exemplo, navegando para fora do atividade), o app precisará redefini-las para ocultar as barras novamente. Consulte Como responder a alterações de visibilidade da IU para obter uma discussão sobre como detectar alterações de visibilidade da IU para que seu aplicativo possa responder de acordo.
- Onde você define as sinalizações da IU faz toda a diferença. Se você ocultar as barras de sistema na função
onCreate()
e o usuário pressionar Home, as barras do sistema serão reaparecer. Quando o usuário reabre a atividade,onCreate()
não será chamado, então as barras do sistema permanecerão visíveis. Se você quiser que a interface do sistema mude para persistem enquanto o usuário navega para dentro e para fora da sua atividade, defina flags de interfaceonResume()
ouonWindowFocusChanged()
. - O método
setSystemUiVisibility()
só tem efeito se a visualização a partir da qual você chamá-lo estiver visível. - Navegar para fora da visualização causa flags
definido com
setSystemUiVisibility()
que será apagado.
Fazer o conteúdo aparecer por trás da barra de status
No Android 4.1 e superior, é possível configurar o conteúdo do seu aplicativo para que apareça atrás
a barra de status, para que o conteúdo não seja redimensionado conforme a barra de status é ocultada e exibida.
Para fazer isso, use
SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
:
Talvez também seja necessário usar
SYSTEM_UI_FLAG_LAYOUT_STABLE
para ajudar seu app a manter um
layout estável.
Ao usar essa abordagem, torna-se sua responsabilidade garantir que as partes essenciais
da interface do usuário do seu aplicativo (por exemplo, os controles integrados em um aplicativo do Google Maps) não acabam
sendo cobertas pelas barras de sistema. Isso pode deixar seu app inutilizável. Na maioria dos casos, é possível
processe isso adicionando o atributo android:fitsSystemWindows
ao seu 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.
Em alguns casos, no entanto, pode ser necessário modificar o padding padrão para conseguir o resultado
para seu app. Para manipular diretamente a forma como seus
distribuição do conteúdo em relação às barras do sistema, que ocupam um espaço conhecido como
"encartes de conteúdo"), substitua fitSystemWindows(Rect insets)
.
O método fitSystemWindows()
é chamado pelo
hierarquia de visualização quando os encartes de conteúdo de uma janela são alterados, para permitir que a janela
ajustar seu conteúdo de acordo. Ao substituir esse método, você pode lidar com o
encartes (e, portanto, o layout do app) como você quiser.