¿Cómo ocultar la barra de navegación permanentemente en la actividad de Android?

Quiero ocultar la barra de navegación permanentemente en mi actividad (no toda la interfaz del sistema). ahora estoy usando esta pieza de código

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

Oculta la barra, pero cuando el usuario toca la pantalla se muestra de nuevo. ¿Hay alguna forma de ocultarlo permanentemente hasta la actividad onStop() ?

Fragmentos:

FullScreenFragment.java

HideNavigationBarComponent.java


Esto es para Android 4.4+

Pruebe el modo inmersivo https://developer.android.com/training/system-ui/immersive.html

Fragmento rápido (para una clase de actividad ):

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

Si tiene problemas, presione Subir volumen o Bajar volumen que muestra la barra de navegación. onCreate código en onCreate see setOnSystemUiVisibilityChangeListener

Aquí hay otra pregunta relacionada:

La navegación en modo inmersivo se vuelve pegajosa después de presionar el volumen o minimizar-restaurar

Hacer esto.

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

Esto funciona al 100% y puede hacer lo mismo con versiones de API más bajas, incluso si es una respuesta tardía, espero que ayude a otra persona.

Si desea que esto sea permanente, simplemente llame a FullscreenCall() dentro de su método onResume() .

Utilizar:-

 view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION); 

En Tablets con Android 4+, no es posible ocultar la barra de sistema / navegación.

De la documentación :

SYSTEM_UI_FLAG_HIDE_NAVIGATION es un nuevo indicador que solicita que la barra de navegación se oculte por completo. Tenga en cuenta que esto funciona solo para la barra de navegación utilizada por algunos teléfonos (no oculta la barra del sistema en las tabletas).

De acuerdo con el sitio del desarrollador de Android

Creo que no puedes (hasta donde sé) ocultar la barra de navegación de forma permanente …

Sin embargo, puedes hacer un truco. Es un truco.

Justo cuando aparece la navigation bar cuando el usuario toca la pantalla. Inmediatamente ocultarlo de nuevo. Es divertido.

Mira esto

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

Consulte esto para obtener más información sobre esto …

Ocultar barra de sistema en tabletas

Creo que el código de golpe te ayudará y agrega esos códigos antes de setContentView ()

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

Agregue los códigos detrás de setContentView () getWindow (). GetDecorView (). SetSystemUiVisibility (View.SYSTEM_UI_FLAG_LOW_PROFILE);

Es un problema de seguridad: https://stackoverflow.com/a/12605313/1303691

por lo tanto, no es posible ocultar la navegación en una tableta de forma permanente con una única llamada al comienzo de la creación de la vista. Estará oculto, pero aparecerá cuando toque la pantalla. Por lo tanto, solo con un segundo toque en la pantalla puede provocar onClickEvent en su diseño. Por lo tanto, debe interceptar esta llamada, pero todavía no lo he logrado, actualizaré mi respuesta cuando la encuentre. ¿O ya tienes la respuesta?

Prueba esto.

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

avísame si eso ayuda … 🙂

Es mi solución:

Primero, defina booleano que indique si la barra de navegación es visible o no.

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

Segundo método de creación que oculta la barra de navegación.

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

De forma predeterminada, si hace clic en actividad después de ocultar la barra de navegación, la barra de navegación estará visible. Así que tenemos su estado si es visible lo ocultaremos.

Ahora configure OnClickListener a su vista. Utilizo una vista de superficie así que para mí:

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

Además, debemos llamar a este método cuando se inicia la actividad. Porque queremos ocultarlo al principio.

  setNavigationBarVisibility(navigationBarVisibility);