Deze les beschrijft hoe u de statusbalk kunt verbergen op verschillende versies van Android. Het verbergen van de statusbalk (en optioneel, de navigatiebalk) laat de inhoud meer van de display ruimte gebruiken, waardoor een meer meeslepende gebruikerservaring ontstaat.

Figuur 1 toont een app met een zichtbare statusbalk:

Figuur 1. Figuur 1 toont een app met een zichtbare statusbalk:

Figuur 1. Zichtbare statusbalk.

Figuur 2 toont een app met een verborgen statusbalk. Merk op dat de actiebalk ook verborgen is. U moet de actiebalk nooit tonen zonder de statusbalk.

Figuur 2. Verborgen statusbalk.

Verberg de statusbalk op Android 4.0 en lager

U kunt de statusbalk verbergen op Android 4.0 (API-niveau 14) en lager doorWindowManager vlaggen in te stellen. U kunt dit programmatisch doen of door een activiteitsthema in te stellen in het manifestbestand van uw app. Het instellen van een activiteitenthema in het manifest-bestand van uw app verdient de voorkeur als de statusbalk altijd verborgen moet blijven in uw app (hoewel u strikt genomen het thema programmatisch zou kunnen overschrijven als u dat zou willen). Bijvoorbeeld:

<application ... android:theme="@android:style/Theme.Holo.NoActionBar.Fullscreen" > ...</application>

De voordelen van het gebruik van een activiteit thema zijn als volgt:

  • Het is makkelijker te onderhouden en minder foutgevoelig dan het programmatisch instellen van een vlag.
  • Het resulteert in vloeiendere UI-overgangen, omdat het systeem de informatie heeft die het nodig heeft om uw UI te renderen voordat de hoofdactiviteit van uw app wordt geïnitialiseerd.

Aternatief kunt u WindowManager vlaggen programmatisch instellen.Deze aanpak maakt het gemakkelijker om de statusbalk te verbergen en te tonen terwijl de gebruiker met uw app communiceert:

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); } ...}

Wanneer u WindowManager-vlaggen instelt (hetzij via een activiteitsthema of programmatisch), blijven de vlaggen van kracht tenzij uw app ze opheft.

U kuntFLAG_LAYOUT_IN_SCREEN gebruiken om de lay-out van uw activiteit zo in te stellen dat dezelfde schermruimte wordt gebruikt die beschikbaar is wanneer uFLAG_FULLSCREEN hebt ingeschakeld. Dit voorkomt dat uw inhoud van formaat verandert wanneer de statusbalk wordt verborgen en getoond.

Verberg de statusbalk op Android 4.1 en hoger

U kunt de statusbalk verbergen op Android 4.1 (API-niveau 16) en hoger door setSystemUiVisibility() te gebruiken.setSystemUiVisibility() stelt UI-vlaggen in op het individuele weergaveniveau; deze instellingen worden geaggregeerd naar het vensterniveau. Het gebruik van setSystemUiVisibility() om UI vlaggen in te stellen geeft u meer granulaire controle over de systeembalken dan het gebruik vanWindowManager vlaggen. Dit knipsel verbergt de statusbalk:

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();

Not het volgende:

  • Als UI-vlaggen eenmaal zijn gewist (bijvoorbeeld door weg te navigeren van de activiteit), moet uw app ze opnieuw instellen als u de balken weer wilt verbergen.Zie Reageren op UI zichtbaarheidsveranderingen voor een discussie over hoe te luisteren naar UI zichtbaarheidsveranderingen, zodat uw app dienovereenkomstig kan reageren.
  • Waar u de UI-vlaggen instelt, maakt een verschil. Als u de systeembalken verbergt in de onCreate() methode van uw activiteit en de gebruiker drukt op Home, zullen de systeembalken weer verschijnen. Wanneer de gebruiker de activiteit weer opent, zal onCreate() niet worden aangeroepen, dus de systeembalken zullen zichtbaar blijven. Als u wilt dat systeem UI veranderingen blijven bestaan als de gebruiker in en uit uw activiteit navigeert, stel UI vlaggen inonResume()of onWindowFocusChanged().
  • De methode setSystemUiVisibility() heeft alleen effect als de view van waaruit u het aanroept zichtbaar is.
  • Het wegnavigeren van de view zorgt ervoor dat vlaggen ingesteld met setSystemUiVisibility() worden gewist.

Inhoud achter de statusbalk laten verschijnen

Op Android 4.1 en hoger, kunt u de inhoud van uw toepassing achter de statusbalk laten verschijnen, zodat de inhoud niet wordt aangepast wanneer de statusbalk wordt verborgen en getoond. Gebruik hiervoorSYSTEM_UI_FLAG_LAYOUT_FULLSCREEN. Mogelijk moet u ookSYSTEM_UI_FLAG_LAYOUT_STABLE gebruiken om uw app een stabiele lay-out te geven.

Wanneer u deze aanpak gebruikt, wordt het uw verantwoordelijkheid om ervoor te zorgen dat kritieke delen van de UI van uw app (bijvoorbeeld de ingebouwde besturingselementen in een Kaarten-applicatie) niet worden bedekt door systeembalken. Dit zou je app onbruikbaar kunnen maken. In de meeste gevallen kun je dit oplossen door het android:fitsSystemWindows attribuut toe te voegen aan je XML layout bestand, ingesteld optrue. Dit past de padding van de bovenliggende ViewGroup aan om ruimte te laten voor de systeemvensters. Dit is voldoende voor de meeste toepassingen.

In sommige gevallen moet u echter de standaard padding aanpassen om de gewenste layout voor uw app te krijgen. Om direct te manipuleren hoe uw inhoud zich verhoudt ten opzichte van de systeembalken (die een ruimte innemen die bekend staat als de “inhoudsinsets” van het venster), kunt u fitSystemWindows(Rect insets) overschrijven. De methode fitSystemWindows() wordt door de hiërarchie van het venster aangeroepen wanneer de inhoudsinsets voor een venster zijn gewijzigd, zodat het venster de inhoud dienovereenkomstig kan aanpassen. Door deze methode te overschrijven kun je de insets (en dus de layout van je app) afhandelen zoals jij dat wilt.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.