这个问题已经被问了很多次:如何在android中永久隐藏状态栏?安卓ICS隐藏系统栏隐藏永久系统栏Android但大多数情况下,答案都不起作用,或者只会隐藏起来,直到用户用手指滑动。
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
这会导致应用程序崩溃。
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
这会暂时隐藏它。
window.decorView.systemUiVisibility =
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 or
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
设置systemUIVisiblity具有完全相同的效果。
val windowInsetsController =
ViewCompat.getWindowInsetsController(window.decorView) ?: return
// Configure the behavior of the hidden system bars
windowInsetsController.systemBarsBehavior =
WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
// Hide both the status bar and the navigation bar
windowInsetsController.hide(WindowInsetsCompat.Type.systemBars())
这似乎没有任何作用,但如果会,它可能也会一直隐藏到滑动。
如果已尝试在不同事件上重复调用这些代码块:
val screenText : TextView = findViewById(R.id.textView5);
screenText.setOnClickListener {
hideSystemUI()
}
创建一个TextView并在单击时调用代码块。
window.decorView.setOnSystemUiVisibilityChangeListener { visibility ->
// Note that system bars will only be "visible" if none of the
// LOW_PROFILE, HIDE_NAVIGATION, or FULLSCREEN flags are set.
if (visibility and View.SYSTEM_UI_FLAG_FULLSCREEN == 0) {
// TODO: The system bars are visible. Make any desired
// adjustments to your UI, such as showing the action bar or
// other navigational controls.
hideSystemUI()
} else {
// TODO: The system bars are NOT visible. Make any desired
// adjustments to your UI, such as hiding the action bar or
// other navigational controls.
}
}
此代码片段来自https://developer.android.com/training/system-ui/visibility
但这些工作很麻烦,如果你速度很快,你仍然可以扩展状态栏。滑动后将始终显示导航栏。
我为什么要让这些酒吧消失?因为我在写一个启动器。它应该看起来像三星儿童。在输入密码之前,应该禁止用户更改系统设置中的任何内容。在有这些限制的情况下,如何做到这一点?
我一直在使用它,到目前为止它运行良好。在setContentView((之后运行它。
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
window.insetsController?.hide(WindowInsets.Type.statusBars())
}
适用于android 11请注意,该方法仅适用。如果android操作系统是一个自定义映像,并且您有权更改操作系统源代码的路径:
在自定义android11 os 中从SystemUI隐藏nevigion栏
请参阅源代码https://android.googlesource.com/platform/prebuilts/fullsdk/sources/android-30/+/refs/heads/androidx wear wear正在进行发布.com/android/systemui/statussbar/NavigationBarController.java
frameworks\base\packages\SystemUI\src.com\android\SystemUI\statusbar\phone\NavigationBarController.java
@Override
public void onDisplayRemoved(int displayId) {
removeNavigationBar(displayId);
}
Using view to set flag cannot work properly because when you switch window or app the nav bar will appear again
它可以很容易地删除导航栏或其他