Android NavigationUI 全屏模式下的 Fragment

3
我正在探索 Google 的 Sunflower 样例 Jetpack 应用程序(https://github.com/googlesamples/android-sunflower)。NavGraph 在导航 xml 文件中定义,其中有一个单独的 Activity 和多个 Fragment。主 Activity 布局具有一个 AppBar,所有片段都共享它。我想添加另一个 Fragment 到 NavGraph,以全屏模式显示图像。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)
}

我在新的 Fragment 的 onResume() 中调用了 hideSystemUI,但它不能正常工作。Fragment 仍然显示了在 MainActivity 中设置的主要 AppBar 和导航。我已经尝试了许多其他 S.O. 线程中的解决方案,但大多数似乎基于我在 Jetpack 应用程序之前成功使用的标准 Activity/Fragment 模式。新布局包含一个带有 ImageView 的 FrameLayout。我的新 Fragment 如下:
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)
    }
}

有没有一种方法可以为一个片段启用全屏模式?我没有改变Google的代码,除了将新的Fragment添加到NavGraph之外,但如果需要,我可以在这里发布其他代码。我认为这可能必须通过MainActivity进行管理,但我不确定。提前感谢!
1个回答

1

Fragment 仍然显示在 MainActivity 中设置的主要 AppBar 和导航栏。

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


运行得很好!为了修复崩溃,我使用了 activity!!.appbar.visibility = View.GONE - jilbot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接