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)
}
我在新 Fragment
的 onResume()
中调用了 hideSystemUI
,但它不起作用。 Fragment
仍然显示在 MainActivity
中设置的主要 AppBar
和导航。我尝试了 S.O 中的各种其他解决方案。线程,但大多数似乎是基于我在 Jetpack 之前的应用程序中取得成功的标准 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)
}
}
有没有办法为一个片段启用全屏模式?除了将新的 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
)。
我正在探索 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)
}
我在新 Fragment
的 onResume()
中调用了 hideSystemUI
,但它不起作用。 Fragment
仍然显示在 MainActivity
中设置的主要 AppBar
和导航。我尝试了 S.O 中的各种其他解决方案。线程,但大多数似乎是基于我在 Jetpack 之前的应用程序中取得成功的标准 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)
}
}
有没有办法为一个片段启用全屏模式?除了将新的 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
)。