Java 安卓从fragment设置全屏
这是我的问题:我有一个android应用程序,它允许用户全屏显示,以提高可读性。全屏晶圆厂切换按钮放在一个片段内,该片段实际上包含读数 简单地说:Java 安卓从fragment设置全屏,java,android,Java,Android,这是我的问题:我有一个android应用程序,它允许用户全屏显示,以提高可读性。全屏晶圆厂切换按钮放在一个片段内,该片段实际上包含读数 简单地说: 主要活动包含阅读片段 阅读片段包含一个用于切换全屏的fab按钮 要触发全屏显示,我使用以下代码段: this.fullScreenFab.setOnClickListener(v -> { WindowManager.LayoutParams attrs = getActivity().getWindow().getAttribut
- 主要活动包含阅读片段
- 阅读片段包含一个用于切换全屏的fab按钮
this.fullScreenFab.setOnClickListener(v -> {
WindowManager.LayoutParams attrs = getActivity().getWindow().getAttributes();
if (this.isFullScreen) {
this.isFullScreen = false;
((AppCompatActivity)
getActivity()).getSupportActionBar().show();
getActivity().getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
} else {
this.isFullScreen = true;
((AppCompatActivity) getActivity()).getSupportActionBar().hide();
getActivity().getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LOW_PROFILE
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
}
getActivity().getWindow().setAttributes(attrs);
});
现在,它工作得很好,只是状态栏和操作栏空间一直显示出来。这项活动是FS(甚至Android也警告我这一点),但这两个元素占用的空间仍然存在
全屏禁用:
全屏启用:
正如您所看到的,FS one占据了顶部和底部,因此该片段并不是真正的全屏
片段具有
android:fitsSystemWindows="true"
请帮忙!
提前谢谢。
Valerio您应该尝试使用此标志,因为它旨在删除状态栏和导航
getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
注意:切换或关闭片段时,您需要手动清除此项。否则,此全屏将一直适用,直到父活动存在。为此,
getActivity().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
此外,您还可以全屏使用
FLAG\u
。使用它将有效地设置一个透明的通知栏,但状态栏上的图标仍将显示。Kotlin
在onViewCreated()
中使片段全屏显示
requireActivity().window.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)
requireActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
在onDetach()
中清除全屏标志,这样它就不会影响活动中打开的其他片段
requireActivity().window.clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)
requireActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
--x--x--x--x--x--x--x--x--x--
Java
在onViewCreated()
中使片段全屏显示
requireActivity().window.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)
requireActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
在onDetach()
中清除全屏标志,这样它就不会影响活动中打开的其他片段
requireActivity().window.clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS)
requireActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
在你的飞溅碎片。它也适用于导航 在科特林
override fun onAttach(context: Context) {
super.onAttach(context)
requireActivity().window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
}
override fun onDetach() {
super.onDetach()
requireActivity().window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
}
系统UI全屏标志现在已被弃用,用于API级别30及以上的覆盖
onWindowFocusChanged()
在您的MainActivity
override fun onWindowFocusChanged(hasFocus: Boolean) {
super.onWindowFocusChanged(hasFocus)
if (hasFocus) hideSystemUI() else showSystemUI()
}
private fun hideSystemUI() {
if (Build.VERSION.SDK_INT >= 30) {
window.insetsController?.apply {
hide(WindowInsets.Type.statusBars() or WindowInsets.Type.navigationBars())
}
} else {
// 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
window.decorView.systemUiVisibility = (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.
or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
// Hide the nav bar and status bar
or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
or View.SYSTEM_UI_FLAG_FULLSCREEN)
}
}
private fun showSystemUI() {
if (Build.VERSION.SDK_INT >= 30) {
window.insetsController?.apply {
show(WindowInsets.Type.statusBars() or WindowInsets.Type.navigationBars())
}
} else {
window.decorView.systemUiVisibility = (View.SYSTEM_UI_FLAG_LAYOUT_STABLE
or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN)
}
}
此常量在API级别30中被弃用
WindowManager.LayoutParams.FLAG_FULLSCREEN
使用WindowInsetController#隐藏(int)和键入状态栏()。
您可以在这里查看android文档
getActivity()。getWindow().setFlags(WindowManager.LayoutParams.FLAG_全屏,WindowManager.LayoutParams.FLAG_全屏)代码>试试这个谢谢,你的代码片段成功了。使用.clearFlags,我可以恢复到原始设置。我很高兴能提供帮助!当我们在代码中添加这一行时,只需将一些设置从移动设置清除为默认设置,如显示关闭重置为出厂重置