Android 全屏模式下的 NavigationUI 片段

Android NavigationUI Fragment in Fullscreen Mode

我正在探索 Google 的向日葵示例 Jetpack 应用程序 (https://github.com/googlesamples/android-sunflower)。 NavGraph 在导航 xml 文件中定义,该文件具有单个 Activity 和多个 Fragment。主 Activity 布局有一个 AppBar ,它由所有片段共享。我想向 NavGraph 添加另一个 Fragment 以全屏模式显示图像。 Android 文档显示了以下启用全屏模式的代码:

 private fun hideSystemUI() {
            window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_IMMERSIVE
            or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
            or View.SYSTEM_UI_FLAG_FULLSCREEN)
}

我在新 FragmentonResume() 中调用了 hideSystemUI,但它不起作用。 Fragment 仍然显示在 MainActivity 中设置的主要 AppBar 和导航。我尝试了 S.O 中的各种其他解决方案。线程,但大多数似乎是基于我在 Jetpack 之前的应用程序中取得成功的标准 Activity/Fragment 模式。新布局包含 FrameLayoutImageView。我的新片段如下所示:

class FullScreenFragment: Fragment() {
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                              savedInstanceState: Bundle?): View? {
        super.onCreateView(inflater, container, savedInstanceState)
        val binding = DataBindingUtil.inflate<FragmentFullscreenBinding>(
                inflater, R.layout.fragment_fullscreen, container, false)
        return binding.root
    }

    override fun onResume() {
        super.onResume()
        hideSystemUI()
    }

    private fun hideSystemUI() {
                    activity!!.window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_IMMERSIVE
                                    or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                                    or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                or View.SYSTEM_UI_FLAG_FULLSCREEN)
    }
}

有没有办法为一个片段启用全屏模式?除了将新的 Fragment 添加到 NavGraph 之外,我根本没有更改 Google 的代码,但如果需要,我可以在此处 post 添加其他代码。我认为这可能必须通过 MainActivity 进行管理,但我不确定。提前致谢!

The Fragment still shows the main AppBar and navigation that were set up in MainActivity.

那些不是系统 UI 的一部分,这是 hideSystemUI() 试图控制的。如果您想隐藏小部件,请更新 visibility 属性(例如,findViewById(R.id.appbar).visibility = View.GONE)。