全屏模式下的Android NavigationUI片段

时间:2019-02-23 23:51:12

标签: android android-fragments android-fragmentactivity android-jetpack

我正在探索Google的Sunflower示例Jetpack应用(https://github.com/googlesamples/android-sunflower)。 NavGraph在具有单个Activity和多个Fragment的导航xml文件中定义。主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)
}

我在新的hideSystemUI的{​​{1}}中呼叫Fragment,但它不起作用。 onResume()仍显示在Fragment中设置的主要AppBar和导航。我已经尝试过S.O的各种其他解决方案。线程,但大多数似乎基于我在Jetpack之前的应用程序中已经成功实现的标准MainActivity模式。新布局包含一个Activity/Fragment和一个FrameLayout。我的新片段看起来像这样:

ImageView

是否可以为一个片段启用全屏模式?除了将新的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) } } 添加到NavGraph之外,我根本没有更改Google的代码,但是如有必要,我可以在此处发布其他代码。我认为这可能必须通过Fragment进行管理,但是我不确定。预先感谢!

1 个答案:

答案 0 :(得分:0)

  

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

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