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