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.
- ¿Cuál es la diferencia entre Contexto y Acitividad?
- setting screenOrientation en AndroidManifest.xml no funciona
- Fragmento - cómo puede getActivity () return null DESPUÉS onAttach
- ¿Cómo puedo ejecutar 2 actividades al mismo tiempo
- Android: ¿cómo puedo comprobar si la actividad se está ejecutando?
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í.
- ¿Cómo hacer la transición de la aplicación de Youtube en la búsqueda?
- ¿Cómo puedo eliminar todas las tareas / aplicaciones activas que utilizan ADB?
- No se destruye la actividad actual al pulsar el botón Atrás
- Cómo agregar un texto largo con muchos párrafos en string.xml en android
- Cabecera de clics común para todas las actividades en Android
- ¿Debe cada actividad tener un diseño?
- Android: Configurar onClickListener en una parte del texto de un TextView - Problema
- Todo lo probado excepto el acabado android (); La actividad no funciona
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.
- ¿Por qué el valor del atributo de anotación Rest.rootUrl debe ser una expresión constante?
- Widget Fallback está deshabilitado mientras que en el modo sandbox (Fortumo)