全屏模式下的Android NavigationUI片段

问题描述 投票:1回答:1

我正在探索谷歌的向日葵样本Jetpack应用程序(https://github.com/googlesamples/android-sunflower)。 NavGraph在导航xml文件中定义,该文件具有单个Activity和众多Fragments。主要的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)
}

我在新的hideSystemUIFragment中称onResume(),但它无效。 Fragment仍然显示在AppBar设置的主要MainActivity和导航。我尝试过S.O.的各种其他解决方案。线程,但大多数似乎是基于我在我的预Jetpack应用程序中取得成功的标准Activity/Fragment模式。新布局包含FrameLayoutImageView。我的新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来管理,但我不确定。提前致谢!

android android-fragments android-fragmentactivity android-jetpack
1个回答
0
投票

片段仍然显示在MainActivity中设置的主AppBar和导航。

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

© www.soinside.com 2019 - 2024. All rights reserved.