android - 单个片段上的 Android 沉浸式全屏模式
问题描述
我正在尝试在我的 3 个片段之一上应用沉浸式全屏,就像教程中给出的那样:
private void hideSystemUI() {
// Enables regular immersive mode.
// For "lean back" mode, remove SYSTEM_UI_FLAG_IMMERSIVE.
// Or for "sticky immersive," replace it with SYSTEM_UI_FLAG_IMMERSIVE_STICKY
View decorView = getActivity(). getWindow().getDecorView();
decorView.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_IMMERSIVE
// Set the content to appear under the system bars so that the
// content doesn't resize when the system bars hide and show.
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
// Hide the nav bar and status bar
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN);
}
并从片段的方法中调用该 onCreateView
方法。
我希望这只会影响片段,而是影响所有片段。
如何强制沉浸式屏幕仅影响屏幕单个片段?
解决方案
您将沉浸式模式应用于活动的装饰视图,据我所知,您有一个活动应用程序,因此它适用于您的“根”活动。尝试在破坏片段时退出沉浸模式。例如:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
//...
Handler().post {
activity?.window?.decorView?.systemUiVisibility = (
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
or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY)
}
//...
}
//...
override fun onDestroyView() {
//...
Handler().post {
activity?.window?.decorView?.systemUiVisibility = View.SYSTEM_UI_FLAG_VISIBLE
}
super.onDestroyView()
}
推荐阅读
- exception - 当硬故障处理程序不可用或禁用时,我们会得到连续的硬故障吗?
- java - 我找不到 if 语句使用哪个变量
- python - 计算数据集中所有电影的平均预算
- linux - 与 localhost 的连接是通过内存还是磁盘复制的?
- pptp - DD WRT 路由器上的 PPTP 客户端
- swift - 即使文件存在且可访问,也无法播放音频 URL
- python - UrlLib 提供 HTTP 404
- java - Java谓词如何
允许没有参数的方法? - firebase - 尝试使用 Flutter 和 Firebase 复制 Netflix UI 时出现“RangeError (index)”
- html - Nodemailer 没有找到任何图像,但找到了文本