Android - Fragment 中的 WindowInsetsController 破坏了整个视图

问题描述

我有一个用于拍照的 Fragment,我想在全屏模式下使用它。在 API 30 之前,我使用了官方文档 here 中描述的标志。 但是在将我的项目版本升级到 30 后,Android Studio 告诉该标志已被弃用。所以,我搜索了很多,找到了一些像 here 这样的问题。 按照答案,我将代码更改为:

@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


}

这是一个演示:

enter image description here

如您所见,用户无法访问顶部的按钮,并且视图的底部也是白色的。希望有人能帮忙。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...