2 Stimmen

Wie schaltet man die Statusleiste um?

Ich suche nach einer Möglichkeit, die Statusleiste mit einer onClickListener sondern nur, dass es funktioniert.

WindowManager.LayoutParams lp = getWindow().getAttributes();
if (isStatusbarVisible)
    lp.flags = LayoutParams.FLAG_FULLSCREEN;
else
    lp.flags = LayoutParams.FLAG_FORCE_NOT_FULLSCREEN;
getWindow().setAttributes(lp);
isStatusbarVisible = !isStatusbarVisible;

Ausblenden der Statusleiste mit FLAG_FULLSCREEN scheint nur zu funktionieren, wenn das Flag vor dem Aufruf von setContentView() .

Gibt es eine andere Möglichkeit, die Statusleiste auszublenden?

5voto

Gubbel Punkte 2296

Die Antwort ist recht einfach: Das Löschen der FLAG_FULLSCREEN Flagge ist alles, was notwendig ist:

if (isStatusBarVisible)
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
else
    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);

1voto

ViliusK Punkte 10839

Ich habe nach dieser Lösung gesucht und bin schließlich auf diese Implementierung gestoßen, mit der sich der Vollbildmodus ein- und ausschalten lässt:

private void toggleFullscreen() {
    WindowManager.LayoutParams attrs = getWindow().getAttributes();
    attrs.flags ^= WindowManager.LayoutParams.FLAG_FULLSCREEN;
    getWindow().setAttributes(attrs);
}

Es verwendet bitweise XOR-Logik zum Umschalten zwischen FLAG_FULLSCREEN .

1voto

ByteSlinger Punkte 1349

Wie wir alle gesehen haben, ändert sich die Android-API ständig. Hier ist eine aktuellere Antwort auf die Frage.

Laut diesem Dokument: https://developer.Android.com/training/system-ui/status.html

Ausblenden der Statusleiste unter Android 4.1 und höher

Sie können den Status ausblenden Statusleiste unter Android 4.1 (API-Level 16) und höher ausblenden, indem Sie setSystemUiVisibility(). setSystemUiVisibility() setzt UI-Flags auf der individuellen Ansichtsebene; diese Einstellungen werden auf der Fensterebene Ebene aggregiert. Die Verwendung von setSystemUiVisibility() zum Setzen von UI-Flags gibt Ihnen mehr granularere Kontrolle über die Systemleisten als mit WindowManager-Flags. Dieses Snippet blendet die Statusleiste aus:

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

Ich entlehne das groovige XOR aus den anderen Antworten:

public void toggleFullscreen() {
    View decorView = getWindow().getDecorView();

    int uiOptions = decorView.getSystemUiVisibility();

    uiOptions ^= View.SYSTEM_UI_FLAG_FULLSCREEN;

    decorView.setSystemUiVisibility(uiOptions);
}

Dies funktioniert (ich benutze es) und scheint genauso zu funktionieren wie die getWindow().setAttributes() Lösung, aber es ist der empfohlene Weg in den Entwicklerdokumenten.

0voto

ViliusK Punkte 10839

Es gibt eine bessere Implementierung der Methode "Vollbild umschalten" (die keine boolesche Variable erfordert):

private void toggleFullscreen() {
    WindowManager.LayoutParams attrs = getWindow().getAttributes();
    attrs.flags ^= WindowManager.LayoutParams.FLAG_FULLSCREEN;
    getWindow().setAttributes(attrs);
}

Es verwendet bitweise XOR-Logik zum Umschalten zwischen FLAG_FULLSCREEN .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X