我正在探索 Google 的 Sunflower 样例 Jetpack 应用程序(https://github.com/googlesamples/android-sunflower)。NavGraph 在导航 xml 文件中定义,其中有一个单独的 Activity 和多个 Fragment。主 Activity 布局具有一个 AppBar,所有片段都共享它。我想添加另一个 Fragment 到 NavGraph,以全屏模式显示图像。Android 文档显示以下代码以启用全屏模式:
我在新的 Fragment 的 onResume() 中调用了 hideSystemUI,但它不能正常工作。Fragment 仍然显示了在 MainActivity 中设置的主要 AppBar 和导航。我已经尝试了许多其他 S.O. 线程中的解决方案,但大多数似乎基于我在 Jetpack 应用程序之前成功使用的标准 Activity/Fragment 模式。新布局包含一个带有 ImageView 的 FrameLayout。我的新 Fragment 如下:
有没有一种方法可以为一个片段启用全屏模式?我没有改变Google的代码,除了将新的
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
进行管理,但我不确定。提前感谢!
activity!!.appbar.visibility = View.GONE
。 - jilbot