Saltar al contenido

Pantalla completa inmersiva en Android 11

Siéntete en la libertad de compartir nuestra página y códigos en tus redes sociales, ayúdanos a aumentar nuestra comunidad.

Solución:

Como sugiere la documentación, debe usar WindowInsetsController.

getWindow().setDecorFitsSystemWindows(false);
WindowInsetsController controller = getWindow().getInsetsController();
if (controller != null)  WindowInsets.Type.navigationBars());
    controller.setSystemBarsBehavior(WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE);

Por compatibilidad, utilice WindowCompat y WindowInsetsControllerCompat. Deberá actualizar su dependencia de gradle para androidx.core a por lo menos 1.5.0-alpha05

private fun hideSystemUI() 
    WindowCompat.setDecorFitsSystemWindows(window, false)
    WindowInsetsControllerCompat(window, mainContainer).let  controller ->
        controller.hide(WindowInsetsCompat.Type.statusBars() or WindowInsetsCompat.Type.navigationBars())
        controller.systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
    


private fun showSystemUI() 
    WindowCompat.setDecorFitsSystemWindows(window, true)
    WindowInsetsControllerCompat(window, mainContainer).show(WindowInsetsCompat.Type.statusBars() or WindowInsetsCompat.Type.navigationBars())

Puedes encontrar más información sobre WindowInsets al ver este video de YouTube

EDITAR:

Descubrí que puede haber un problema con la configuración del systemBarsBehavior en algunos dispositivos que utilizan esta biblioteca alfa. Consulte el informe de errores en el sitio de seguimiento de problemas de Google. * Informe de error de estrella para más atención

Hasta que se solucione el error, recomendaría usar lo siguiente en su lugar:

private fun hideSystemUI() 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) 
        window.setDecorFitsSystemWindows(false)
        window.insetsController?.let 
            it.hide(WindowInsets.Type.statusBars() or WindowInsets.Type.navigationBars())
            it.systemBarsBehavior = WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
        
     else 
        @Suppress("DEPRECATION")
        window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_FULLSCREEN
                or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION)
    

Para la desaprobación, puede probar el siguiente código. Trabajó para mi.

  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) 
        final WindowInsetsController controller = getWindow().getInsetsController();

        if (controller != null)
            controller.hide(WindowInsets.Type.statusBars());
    
    else  View.SYSTEM_UI_FLAG_IMMERSIVE
                    

Te mostramos reseñas y valoraciones

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *