Statusleiste ausblenden

In dieser Lektion erfahren Sie, wie Sie die Statusleiste unter verschiedenen Android-Versionen ausblenden. Durch das Ausblenden der Statusleiste (und optional der Navigationsleiste) kann der Inhalt einen größeren Teil des Anzeigeraums nutzen und so die Nutzererfahrung noch ansprechender gestalten.

Abbildung 1 zeigt eine App mit sichtbarer Statusleiste:

Systemleisten

Abbildung 1: Sichtbare Statusleiste.

Abbildung 2 zeigt eine Anwendung mit einer ausgeblendeten Statusleiste. Die Aktionsleiste ist ebenfalls ausgeblendet. Die Aktionsleiste sollte nie ohne die Statusleiste eingeblendet werden.

Systemleisten

Abbildung 2: Ausgeblendete Statusleiste.

Statusleiste unter Android 4.0 und niedriger ausblenden

Unter Android 4.0 (API-Level 14) und niedriger können Sie die Statusleiste ausblenden, indem Sie WindowManager-Flags festlegen. Du kannst dies programmatisch oder durch Festlegen eines Aktivitätsdesigns in der Manifestdatei deiner App tun. Das Festlegen eines Aktivitätsthemas in der Manifestdatei Ihrer App ist der bevorzugte Ansatz, wenn die Statusleiste in Ihrer App immer verborgen bleiben soll. Streng genommen können Sie das Design bei Bedarf programmatisch überschreiben. Beispiele:

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

Die Verwendung eines Aktivitätsthemas bietet folgende Vorteile:

  • Dies ist einfacher zu verwalten und weniger fehleranfällig als das programmatische Festlegen einer Markierung.
  • Die UI-Übergänge sind weicher, da dem System die Informationen vorliegen, die zum Rendern der UI erforderlich sind, bevor die Hauptaktivität der App instanziiert wird.

Alternativ können Sie WindowManager-Flags programmatisch setzen. Dieser Ansatz vereinfacht das Ein- und Ausblenden der Statusleiste, wenn der Nutzer mit Ihrer App interagiert:

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

Wenn Sie WindowManager-Flags festlegen (ob über ein Aktivitätsthema oder programmatisch), bleiben die Flags so lange wirksam, bis sie von Ihrer App gelöscht werden.

Mit FLAG_LAYOUT_IN_SCREEN können Sie das Layout Ihrer Aktivitäten so einstellen, dass derselbe Bildschirmbereich verwendet wird, der auch bei der Aktivierung von FLAG_FULLSCREEN verfügbar ist. Dadurch wird verhindert, dass die Größe des Inhalts angepasst wird, wenn die Statusleiste aus- und wieder eingeblendet wird.

Statusleiste unter Android 4.1 und höher ausblenden

Auf Geräten mit Android 4.1 (API-Level 16) und höher können Sie die Statusleiste mit setSystemUiVisibility() ausblenden. Mit setSystemUiVisibility() werden UI-Flags auf Ebene der einzelnen Ansichten festgelegt. Diese Einstellungen werden auf Fensterebene zusammengefasst. Wenn Sie setSystemUiVisibility() zum Festlegen von UI-Flags verwenden, können Sie die Systembalken genauer steuern als mit WindowManager-Flags. Durch dieses Snippet wird die Statusleiste ausgeblendet:

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

Beachten Sie Folgendes:

  • Nachdem die UI-Flags gelöscht wurden (z. B. indem Sie die Aktivität verlassen haben), müssen sie von Ihrer App zurückgesetzt werden, wenn die Balken wieder ausgeblendet werden sollen. Unter Reagieren auf Änderungen der UI-Sichtbarkeit wird erläutert, wie Sie auf Änderungen der UI-Sichtbarkeit reagieren können, damit Ihre Anwendung entsprechend reagieren kann.
  • Es spielt eine Rolle, wo Sie die UI-Flags festlegen. Wenn Sie die Systemleisten in der onCreate()-Methode Ihrer Aktivität ausblenden und der Nutzer die Startbildschirmtaste drückt, werden die Systemleisten wieder angezeigt. Wenn der Nutzer die Aktivität wieder öffnet, wird onCreate() nicht aufgerufen. Daher bleiben die Systemleisten sichtbar. Wenn Sie möchten, dass Änderungen an der System-UI beibehalten werden, während der Nutzer Ihre Aktivität ein- und ausgeht, legen Sie UI-Flags in onResume() oder onWindowFocusChanged() fest.
  • Die Methode setSystemUiVisibility() hat nur dann einen Effekt, wenn die Ansicht, über die Sie sie aufrufen, sichtbar ist.
  • Wenn Sie die Ansicht verlassen, werden die mit setSystemUiVisibility() festgelegten Flags gelöscht.

Inhalte hinter der Statusleiste anzeigen

Unter Android 4.1 und höher können Sie festlegen, dass der Inhalt Ihrer App hinter der Statusleiste angezeigt wird. So ändert sich die Größe des Inhalts nicht, wenn die Statusleiste aus- und wieder eingeblendet wird. Verwenden Sie dazu SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN. Möglicherweise müssen Sie auch SYSTEM_UI_FLAG_LAYOUT_STABLE verwenden, damit Ihre App ein stabiles Layout hat.

Bei diesem Ansatz liegt es in Ihrer Verantwortung, dafür zu sorgen, dass wichtige Teile der Benutzeroberfläche Ihrer App (z. B. die in einer Maps-App integrierten Steuerelemente) nicht von Systemleisten verdeckt werden. Dies könnte deine App unbrauchbar machen. In den meisten Fällen können Sie das Problem beheben, indem Sie Ihrer XML-Layoutdatei das Attribut android:fitsSystemWindows hinzufügen. Legen Sie dafür true fest. Dadurch wird das Padding des übergeordneten ViewGroups angepasst, um Platz für die Systemfenster zu lassen. Dies ist für die meisten Anwendungen ausreichend.

In einigen Fällen müssen Sie jedoch möglicherweise den Standardabstand ändern, um das gewünschte Layout für Ihre Anwendung zu erhalten. Wenn Sie direkt beeinflussen möchten, wie Ihr Inhalt im Verhältnis zu den Systembalken einnimmt, die einen als „Inhaltseinsatz“ des Fensters bezeichneten Raum einnehmen, überschreiben Sie fitSystemWindows(Rect insets). Die Methode fitSystemWindows() wird von der Ansichtshierarchie aufgerufen, wenn sich die Inhaltseinfügungen für ein Fenster geändert haben, damit der Inhalt des Fensters entsprechend angepasst werden kann. Wenn Sie diese Methode überschreiben, können Sie die Einsätze (und damit auch das Layout Ihrer Anwendung) wie gewünscht verarbeiten.