El modo de inmersión de Android se restablece al cambiar la actividad

Estoy enfrentando un problema al usar el modo de inmersión. Aquí está el código que pongo en todas las actividades:

@Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); if (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 ); } } 

El navigationBar y el statusBar son invisibles, esto es bueno.

El problema es que cada vez que voy a otra actividad, aparece la navigationBar y luego desaparece. Me gustaría que la navigationBar de navigationBar para no aparecer así.

Si invoque este corto de código en el método onCreate de actividad como el siguiente ejemplo:

  @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); hideSystemUI(); ... } // This snippet hides the system bars. private void hideSystemUI() { // Set the IMMERSIVE flag. // Set the content to appear under the system bars so that the content // doesn't resize when the system bars hide and show. 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 // hide nav bar | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar | View.SYSTEM_UI_FLAG_IMMERSIVE); } 

Y debe invocar el método en onWindowFocusChanged también.

Espero que esto te ayude =)

La forma más sencilla de trabajar es crear una clase de actividad base como la siguiente:

 public abstract class BaseActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); enableImmersiveMode(); } @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); if(hasFocus) { enableImmersiveMode(); } } protected void enableImmersiveMode() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { 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 ); } } } 

Y todas las actividades que deberían funcionar en modo inmersivo deberían heredar de la clase base anterior.

Acabo de probarlo. Evita que un menú en pantalla se oculte y revele mientras cambia las actividades.

tal vez es tarde, pero ahora me enfrenté a la misma cuestión que usted, y tropezó con este post. Por curiosidad encontré solución que funcionó para mí. Llamé manualmente la función "onWindowFocusChanged" y pasé el parámetro "true". Llamé a esa función en OnCreate, antes de "setContentView (R.layout.activity_main);". Que ejecutó la función y establecer el modo inmersivo (pantalla completa), antes de la disposición se agregó, y ahora no veo ocultar la animación de la navegación y las barras de estado. Espero que te ayude.

Este es el código:

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); onWindowFocusChanged(true); setContentView(R.layout.activity_main); } @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); if (hasFocus) { getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);} } 

La solución real es llamar a setSystemUiVisibility en onResume y onWindowFocusChanged .

 @Override protected void onResume() { super.onResume(); hide(); } @Override public void onWindowFocusChanged(boolean hasFocus) { super.onWindowFocusChanged(hasFocus); hide(); } public void hide() { getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_STABLE); } 

También me enfrenté a este problema. Parece que no hay manera de detener Android de mostrar la barra de navegación de nuevo después de los cambios de configuración.

Lo que es peor, tampoco está garantizado cuando se restablezca exactamente la interfaz de usuario del sistema. De acuerdo con mis pruebas en algunos dispositivos de la barra de navegación puede reaparecer incluso después onWindowFocusChanged y onResume han sido llamados.

La única manera confiable que he encontrado para evitar la reaparición de la interfaz de usuario no deseada es añadir isInFullScreenMode bandera booleana e implementar View.OnSystemUiVisibilityChangeListener algo como esto:

 @Override public void onSystemBarsVisible() { if (isInFullScreenMode) { // If Android presented system bars // but our app doesn't need them at this point // just call hideSystemUi() again hideSystemUi(); return; } } @Override public void onSystemBarsHidden() { if (!isInFullScreenMode) { // Similar technique as shown above showSystemUi(); return; } } 

Por supuesto, a veces en rotación podemos ver cómo las barras del sistema aparecen y desaparecen rápidamente. Pero al menos podemos estar seguros de que el estado de la interfaz de usuario de nuestra aplicación se restaurará de manera fiable.

  • ¿Mostrar la actividad (diálogo del tema) arriba del Dialer en lockscreen?
  • ¿Cómo enviar datos de servicio a mi actividad?
  • Vista previa de Android M: la actividad se recrea después de la concesión del permiso
  • Cómo agregar la flecha hacia atrás o el botón Atrás en la barra de acción
  • Métodos del ciclo de vida de la actividad: onPostResume significado
  • El flujo maestro / detallado tiene un nivel mínimo de api igual al uso
  • OverridePendingTransition en SDK de Android no funciona
  • Android studio> crear un nuevo proyecto> Actividad de Google Play Services: ¿Qué es esto?
  • Adaptador de matriz de Android con ArrayList y ListView no se actualizan cuando se cambia el arraylist
  • Ocultar android.support.v7.widget.Toolbar mediante programación
  • Android: el inicio de la aplicación de 'aplicaciones recientes' comienza con el último conjunto de extras utilizados en una intención
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.