webentwicklung-frage-antwort-db.com.de

Wie verstecke ich die Navigationsleiste dauerhaft in Android Aktivität?

Ich möchte die Navigationsleiste dauerhaft in meiner Aktivität verstecken (nicht die gesamte Systemoberfläche). Jetzt verwende ich diesen Code

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);

Die Leiste wird ausgeblendet, aber wenn der Benutzer den Bildschirm berührt, wird sie erneut angezeigt. Gibt es eine Möglichkeit, es dauerhaft zu verbergen, bis Aktivität onStop();

63

Snippets:

FullScreenFragment.Java

HideNavigationBarComponent.Java


Dies ist für Android 4.4 +

Probieren Sie den immersiven Modus aus https://developer.Android.com/training/system-ui/immersive.html

Schnelles Snippet (für eine Aktivität Klasse):

private int currentApiVersion;

@Override
@SuppressLint("NewApi")
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    currentApiVersion = Android.os.Build.VERSION.SDK_INT;

    final int flags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
        | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
        | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
        | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
        | View.SYSTEM_UI_FLAG_FULLSCREEN
        | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;

    // This work only for Android 4.4+
    if(currentApiVersion >= Build.VERSION_CODES.KitKat)
    {

        getWindow().getDecorView().setSystemUiVisibility(flags);

        // Code below is to handle presses of Volume up or Volume down.
        // Without this, after pressing volume buttons, the navigation bar will
        // show up and won't hide
        final View decorView = getWindow().getDecorView();
        decorView
            .setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener()
            {

                @Override
                public void onSystemUiVisibilityChange(int visibility)
                {
                    if((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0)
                    {
                        decorView.setSystemUiVisibility(flags);
                    }
                }
            });
    }

}


@SuppressLint("NewApi")
@Override
public void onWindowFocusChanged(boolean hasFocus)
{
    super.onWindowFocusChanged(hasFocus);
    if(currentApiVersion >= Build.VERSION_CODES.KitKat && hasFocus)
    {
        getWindow().getDecorView().setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_FULLSCREEN
                | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
    }
}

Wenn Sie Probleme haben, wenn Sie die Taste "Lauter" oder "Leiser" drücken, wird in der Navigationsleiste angezeigt. Ich habe Code in onCreate hinzugefügt, siehe setOnSystemUiVisibilityChangeListener

Hier ist eine weitere verwandte Frage:

Die Navigation im immersiven Modus bleibt nach dem Drücken der Lautstärke oder dem Minimieren/Wiederherstellen der Lautstärke hängen

95
Dawid Drozd

Mach das.

public void FullScreencall() {
    if(Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) { // lower api
        View v = this.getWindow().getDecorView();
        v.setSystemUiVisibility(View.GONE);
    } else if(Build.VERSION.SDK_INT >= 19) {
        //for new api versions.
        View decorView = getWindow().getDecorView();
        int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
        decorView.setSystemUiVisibility(uiOptions);
    }
}

Dies funktioniert zu 100% und Sie können dasselbe für niedrigere API-Versionen tun, auch wenn es eine späte Antwort ist. Ich hoffe, es hilft jemand anderem.

Wenn dies dauerhaft sein soll, rufen Sie einfach FullscreenCall() in Ihrer onResume() -Methode auf.

48
Evish Verma

Verwenden:-

view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);

In Tablets mit Android 4+ ist es nicht möglich, die System-/Navigationsleiste auszublenden.

Von Dokumentation :

Die SYSTEM_UI_FLAG_HIDE_NAVIGATION ist ein neues Flag, das anfordert, dass die Navigationsleiste vollständig ausgeblendet wird. Beachten Sie, dass dies nur für die Navigationsleiste funktioniert, die von einigen Mobilteilen verwendet wird (die Systemleiste wird auf Tablets nicht ausgeblendet).

3
Namrata

Laut Android Developer Site

Ich denke, Sie können die Navigationsleiste (soweit ich weiß) nicht dauerhaft verbergen.

Sie können jedoch einen Trick machen. Es ist ein Trick wohlgemerkt.

Gerade als das navigation bar wird angezeigt, wenn der Benutzer den Bildschirm berührt. Verstecke es sofort wieder. Es macht Spaß.

Aktivieren Sie dieses Kontrollkästchen .

void setNavVisibility(boolean visible) {
int newVis = SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
        | SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
        | SYSTEM_UI_FLAG_LAYOUT_STABLE;
if (!visible) {
    newVis |= SYSTEM_UI_FLAG_LOW_PROFILE | SYSTEM_UI_FLAG_FULLSCREEN
            | SYSTEM_UI_FLAG_HIDE_NAVIGATION;
}

// If we are now visible, schedule a timer for us to go invisible.
if (visible) {
    Handler h = getHandler();
    if (h != null) {
        h.removeCallbacks(mNavHider);
        if (!mMenusOpen && !mPaused) {
            // If the menus are open or play is paused, we will not auto-hide.
            h.postDelayed(mNavHider, 1500);
        }
    }
}

// Set the new desired visibility.
setSystemUiVisibility(newVis);
mTitleView.setVisibility(visible ? VISIBLE : INVISIBLE);
mPlayButton.setVisibility(visible ? VISIBLE : INVISIBLE);
mSeekView.setVisibility(visible ? VISIBLE : INVISIBLE);
}

Weitere Informationen hierzu finden Sie hier.

Systemleiste in Tablets ausblenden

3
Sandeep R

Es ist ein Sicherheitsproblem: https://stackoverflow.com/a/12605313/1303691

daher ist es nicht möglich, die Navigation auf einem Tablet mit einem einzigen Aufruf zu Beginn der Ansichtserstellung dauerhaft auszublenden. Es wird ausgeblendet, aber beim Berühren des Bildschirms wird es eingeblendet. Schon die zweite Berührung Ihres Bildschirms kann zu einem onClickEvent in Ihrem Layout führen. Daher müssen Sie diesen Anruf abfangen, aber ich habe es noch nicht geschafft, ich werde meine Antwort aktualisieren, wenn ich es herausgefunden habe. Oder hast du jetzt schon die Antwort?

1
swisscoder

Ich denke, der Blow-Code wird Ihnen helfen, und fügen Sie diesen Code vor setContentView ()

getWindow().setFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS, WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);

Fügen Sie diesen Code hinter setContentView () getWindow (). GetDecorView (). SetSystemUiVisibility (View.SYSTEM_UI_FLAG_LOW_PROFILE) hinzu.

1
qingfei song

Viele gute und spezifische Details sind hier aufgeführt: Vollbildmodus aktivieren

Dies ist ein offizieller Google/Android-Link. Stimmen Sie mich also nicht ab, wenn Sie nur einen Link einfügen, ohne die Frage zu beantworten.

0
Chris Sprague

Versuche dies.

View decorView = getWindow().getDecorView();
int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
          | View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);

lass es mich wissen wenn das hilft ... :)

0
Rashad

Das ist meine Lösung:

Definieren Sie zunächst einen Booleschen Wert, der angibt, ob die Navigationsleiste angezeigt wird oder nicht.

boolean navigationBarVisibility = true //because it's visible when activity is created

Zweite Methode zum Ausblenden der Navigationsleiste erstellen.

private void setNavigationBarVisibility(boolean visibility){
    if(visibility){
        View decorView = getWindow().getDecorView();
        int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_FULLSCREEN;
        decorView.setSystemUiVisibility(uiOptions);
        navigationBarVisibility = false;
    }

    else
        navigationBarVisibility = true;
}

Wenn Sie nach dem Ausblenden der Navigationsleiste auf Aktivität klicken, wird die Navigationsleiste standardmäßig angezeigt. Also haben wir den Status, wenn er sichtbar ist, werden wir ihn verstecken.

Setzen Sie nun OnClickListener auf Ihre Ansicht. Ich benutze eine Oberflächenansicht so für mich:

    playerSurface.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            setNavigationBarVisibility(navigationBarVisibility);
        }
    });

Außerdem müssen wir diese Methode aufrufen, wenn die Aktivität gestartet wird. Weil wir es am Anfang verstecken wollen.

        setNavigationBarVisibility(navigationBarVisibility);
0
PeerNet