Ich möchte die Navigationsleiste dauerhaft in meiner Aktivität ausblenden (nicht die gesamte System-Benutzeroberfläche). Jetzt benutze 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. ist es eine Möglichkeit , es permanent , bis Aktivität zu verbergen onStop()
;
android
fullscreen
navigationbar
Sujith Manjavana
quelle
quelle
Antworten:
Schnipsel:
FullScreenFragment.java
HideNavigationBarComponent.java
Dies ist für Android 4.4+
Probieren Sie den immersiven Modus https://developer.android.com/training/system-ui/immersive.html aus
Schneller Ausschnitt (für eine Aktivitätsklasse ):
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 Lautstärke erhöhen oder verringern, wird dies in Ihrer Navigationsleiste angezeigt. Ich habe Code in
onCreate
siehe setOnSystemUiVisibilityChangeListener hinzugefügtHier ist eine andere verwandte Frage:
Die Navigation im Immersive-Modus wird nach dem Drücken der Lautstärke oder dem Minimieren und Wiederherstellen klebrig
quelle
android:fitsSystemWindows="true"
aus Ihren Ansichten entfernen . Android Studio enthält dieses Attribut beim Generieren einiger Layouts. Siehe stackoverflow.com/a/42501330/650894Mach 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 dies auch für niedrigere API-Versionen tun, auch wenn es eine späte Antwort ist. Ich hoffe, es hilft jemand anderem.
Wenn Sie möchten, dass dies dauerhaft ist, rufen
FullscreenCall()
Sie einfach IhreonResume()
Methode auf.quelle
Für Leute, die nach einer einfacheren Lösung suchen, kann man nur diese eine Codezeile verwenden
onStart()
getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_HIDE_NAVIGATION| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
Es heißt Immersive Mode. Weitere Möglichkeiten finden Sie in der offiziellen Dokumentation.
quelle
Laut Android Developer Site
Ich denke, Sie können die Navigationsleiste (soweit ich weiß) nicht dauerhaft verstecken.
Sie können jedoch einen Trick machen. Es ist ein Trick wohlgemerkt.
Nur wenn
navigation bar
das angezeigt wird, wenn der Benutzer den Bildschirm berührt. Verstecke es sofort wieder. Es macht Spaß.Überprüfen Sie dies .
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
quelle
Verwenden:-
view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
In Tablets mit Android 4+ ist es nicht möglich, die System- / Navigationsleiste auszublenden.
Aus der Dokumentation :
quelle
Es ist meine Lösung:
Definieren Sie zunächst einen Booleschen Wert, der angibt, ob die Navigationsleiste sichtbar ist oder nicht.
boolean navigationBarVisibility = true //because it's visible when activity is created
Zweitens erstellen Methode, die Navigationsleiste ausblenden.
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 standardmäßig die Navigationsleiste angezeigt. Wir haben also den Zustand, wenn er sichtbar ist, werden wir ihn verstecken.
Stellen Sie nun OnClickListener auf Ihre Ansicht ein. Ich benutze eine Oberflächenansicht also 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);
quelle
Es ist ein Sicherheitsproblem: https://stackoverflow.com/a/12605313/1303691
Daher ist es nicht möglich, die Navigation auf einem Tablet mit einem einzigen Anruf zu Beginn der Ansichtserstellung dauerhaft auszublenden. Es wird ausgeblendet, aber beim Berühren des Bildschirms angezeigt. 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 ihn noch nicht verwaltet. Ich werde meine Antwort aktualisieren, wenn ich es herausgefunden habe. Oder hast du jetzt schon die Antwort?
quelle
Ich denke, der Blow-Code wird Ihnen helfen und diesen Code vor setContentView () hinzufügen.
getWindow().setFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS, WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
Fügen Sie diesen Code hinter setContentView () hinzu. GetWindow (). GetDecorView (). SetSystemUiVisibility (View.SYSTEM_UI_FLAG_LOW_PROFILE);
quelle
Versuche dies:
View decorView = getWindow().getDecorView(); int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN; decorView.setSystemUiVisibility(uiOptions);
quelle
Ich denke, dieser Code wird Ihr Problem lösen. Kopieren Sie diesen Code und fügen Sie ihn in Ihre MainActivity.java ein
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); View decorView = getWindow().getDecorView(); decorView.setOnSystemUiVisibilityChangeListener (new View.OnSystemUiVisibilityChangeListener() { @Override public void onSystemUiVisibilityChange(int visibility) { if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) { hideNavigationBar(); } } }); } private void hideNavigationBar() { getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_HIDE_NAVIGATION| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY); }
Es wird auf Android-10 funktionieren. Ich hoffe es wird helfen.
quelle
Die anderen Antworten verwenden meistens die Flags für die
setSystemUiVisibility()
Methode inView
. Diese API ist jedoch seit Android 11 veraltet. Weitere Informationen finden Sie in meinem Artikel zum Ändern der Sichtbarkeit der Systembenutzeroberfläche. In diesem Artikel wird auch erläutert, wie Sie die Ausschnitte richtig handhaben oder wie Sie die Änderungen der Sichtbarkeit abhören.Hier sind Codefragmente zum Ein- / Ausblenden von Systemleisten mit der neuen API sowie die aus Gründen der Abwärtskompatibilität veraltete:
/** * Hides the system bars and makes the Activity "fullscreen". If this should be the default * state it should be called from [Activity.onWindowFocusChanged] if hasFocus is true. * It is also recommended to take care of cutout areas. The default behavior is that the app shows * in the cutout area in portrait mode if not in fullscreen mode. This can cause "jumping" if the * user swipes a system bar to show it. It is recommended to set [WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER], * call [showBelowCutout] from [Activity.onCreate] * (see [Android Developers article about cutouts](https://developer.android.com/guide/topics/display-cutout#never_render_content_in_the_display_cutout_area)). * @see showSystemUI * @see addSystemUIVisibilityListener */ fun Activity.hideSystemUI() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { window.insetsController?.let { // Default behavior is that if navigation bar is hidden, the system will "steal" touches // and show it again upon user's touch. We just want the user to be able to show the // navigation bar by swipe, touches are handled by custom code -> change system bar behavior. // Alternative to deprecated SYSTEM_UI_FLAG_IMMERSIVE. it.systemBarsBehavior = WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE // make navigation bar translucent (alternative to deprecated // WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION) // - do this already in hideSystemUI() so that the bar // is translucent if user swipes it up window.navigationBarColor = getColor(R.color.internal_black_semitransparent_light) // Finally, hide the system bars, alternative to View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // and SYSTEM_UI_FLAG_FULLSCREEN. it.hide(WindowInsets.Type.systemBars()) } } else { // Enables regular immersive mode. // For "lean back" mode, remove SYSTEM_UI_FLAG_IMMERSIVE. // Or for "sticky immersive," replace it with SYSTEM_UI_FLAG_IMMERSIVE_STICKY @Suppress("DEPRECATION") window.decorView.systemUiVisibility = ( // Do not let system steal touches for showing the navigation bar View.SYSTEM_UI_FLAG_IMMERSIVE // Hide the nav bar and status bar or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_FULLSCREEN // Keep the app content behind the bars even if user swipes them up or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN) // make navbar translucent - do this already in hideSystemUI() so that the bar // is translucent if user swipes it up @Suppress("DEPRECATION") window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION) } } /** * Shows the system bars and returns back from fullscreen. * @see hideSystemUI * @see addSystemUIVisibilityListener */ fun Activity.showSystemUI() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { // show app content in fullscreen, i. e. behind the bars when they are shown (alternative to // deprecated View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION and View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN) window.setDecorFitsSystemWindows(false) // finally, show the system bars window.insetsController?.show(WindowInsets.Type.systemBars()) } else { // Shows the system bars by removing all the flags // except for the ones that make the content appear under the system bars. @Suppress("DEPRECATION") window.decorView.systemUiVisibility = ( View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN) } }
quelle