如何在我的 Android 11 应用程序中隐藏状态栏?
How do I hide the status bar in my Android 11 app?
我遇到的隐藏我的 Android 应用程序状态栏的所有方法在 Android 11 中已弃用。
有人知道目前可接受的方法吗?
我也使用 Kotlin 开发我的应用程序。
API 等级 < 16
如果您想在应用程序中隐藏 status bar
,只需将应用程序设置为全屏即可。在 onCreate
方法中只需添加 FLAG_FULLSCREEN
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_loading);
这是如果Build.VERSION.SDK_INT < 16
.
API 等级 >= 16 且 < 30
这适用于 Build.VERSION.SDK_INT
大于 16;
View decorView = getWindow().getDecorView();
// Hide the status bar.
int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
只需将其添加到 onCreate
中您想隐藏 status bar
的位置。您可以在此处阅读更多内容:https://developer.android.com/training/system-ui/status#41
编辑:API 级别 >= 30
似乎 SYSTEM_UI_FLAG_FULLSCREEN
也从 Android 11 中删除,即使它在文档中没有说明任何内容。但是基于 this tutorial you can do this in Android 11 you need to use WindowInsetsController and its hide() 方法。与建议的其他答案一样,您可以使用:
getWindow().getDecorView().getWindowInsetsController().hide(
android.view.WindowInsets.Type.statusBars()
);
因此,这是针对Android11及更高版本的,其他方法适用于更早的版本。
当您的设备为 API-30 (Android 11; minSdkVersion 30) 或更高版本时,setSystemUiVisibility
已弃用,您可以使用新引入的 WindowInsetsController
代替. (请注意,您不能在 API-29 或更早版本上使用 WindowInsetsController
)。
所以官方参考说:
This method was deprecated in API level 30. SystemUiVisibility flags are deprecated. Use
WindowInsetsController
instead.
你应该使用 WindowInsetsController
class.
在 Kotlin 中:
window.decorView.windowInsetsController!!.hide(
android.view.WindowInsets.Type.statusBars()
)
在Java中:
getWindow().getDecorView().getWindowInsetsController().hide(
android.view.WindowInsets.Type.statusBars()
);
如果你也想隐藏NavigationBar:
在 Kotlin 中:
window.decorView.windowInsetsController!!.hide(
android.view.WindowInsets.Type.statusBars()
or android.view.WindowInsets.Type.navigationBars()
)
在Java中:
getWindow().getDecorView().getWindowInsetsController().hide(
android.view.WindowInsets.Type.statusBars()
| android.view.WindowInsets.Type.navigationBars()
);
你在找这个吗?
// 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)
这是在 kotlin 中 hide/show 状态栏的最简单方法。
private fun Activity.hideStatusBars() {
WindowInsetsControllerCompat(window, window.decorView)
.hide(WindowInsetsCompat.Type.statusBars())
}
private fun Activity.showStatusBars() {
WindowInsetsControllerCompat(window, window.decorView)
.hide(WindowInsetsCompat.Type.statusBars())
}
如果您需要 show/hide 状态栏和导航栏都使用 systemBars()
而不是 statusBars()
,如下例所示。
private fun Activity.hideSystemBars() {
WindowInsetsControllerCompat(window, window.decorView)
.hide(WindowInsetsCompat.Type.systemBars())
}
private fun Activity.showSystemBars() {
WindowInsetsControllerCompat(window, window.decorView)
.hide(WindowInsetsCompat.Type.systemBars())
}