Android – WindowInsetsController во фрагменте уничтожает весь вид

У меня есть фрагмент для фотографирования, и я хотел, чтобы он был в полноэкранном режиме. До API 30 я использовал флаги, как описано в официальной документации здесь. Но после обновления версии моего проекта до 30 Android Studio сообщает, что флаг устарел. Итак, я много искал и нашел несколько таких вопросов, как этот здесь. После ответов я изменил свой код на это:

@Suppress("DEPRECATION")
        @SuppressLint("ObsoleteSdkInt")
        fun setFullscreen(activity: Activity?) {
            activity?.let{
                when {
                    /*I added this case below. And the view looks very weird. Why??*/
                    Build.VERSION.SDK_INT >= 30 -> {
                        it.window.setDecorFitsSystemWindows(false)
                        val controller: WindowInsetsController? = it.window.insetsController
                        controller?.let { insetsController ->
                            insetsController.hide(WindowInsets.Type.statusBars() or WindowInsets.Type.navigationBars())
                            insetsController.systemBarsBehavior = WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
                        }
                    }
                    /*The code below worked for years. Why they change working stuff?*/
                    Build.VERSION.SDK_INT > 10 -> {
                        // Enables regular immersive mode.
                        // For "lean back" mode, remove SYSTEM_UI_FLAG_IMMERSIVE.
                        // Or for "sticky immersive," replace it with SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                        it.window.decorView.systemUiVisibility = (
                                View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                                        // Set the content to appear under the system bars so that the
                                        // content doesn't resize when the system bars hide and show.
                                        or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                                        or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                                        or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                                        // Hide the nav bar and status bar
                                        or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                                        or View.SYSTEM_UI_FLAG_FULLSCREEN
                                        or View.SYSTEM_UI_FLAG_LOW_PROFILE
                                )
                        (it as? AppCompatActivity)?.supportActionBar?.hide()
                    }
                    else -> {
                        it.window
                                .setFlags(
                                        WindowManager.LayoutParams.FLAG_FULLSCREEN,
                                        WindowManager.LayoutParams.FLAG_FULLSCREEN
                                )
                    }
                }
            }
        }

Во фрагменте я вызываю этот метод так:

override fun onCreateView(
            inflater: LayoutInflater, container: ViewGroup?,
            savedInstanceState: Bundle?
    ): View? {
        // some code ...
        // bla bla etc.

        setFullscreen(activity)
 
        // .. and so on


}

Вот демо:

введите здесь описание изображения

Как видите, кнопка сверху недоступна для пользователя, а нижняя часть представления также белая. Я надеюсь, что кто-то может помочь.


person abdullah celik    schedule 04.03.2021    source источник