在Android 11中,可以使用WindowInsetsController
类来控制窗口的系统边界,以达到不显示状态栏和导航栏背后的屏幕的效果。以下是一个示例代码:
// 获取窗口的根视图
View decorView = getWindow().getDecorView();
// 设置全屏模式
int flags = View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
decorView.setSystemUiVisibility(flags);
// 隐藏状态栏和导航栏
WindowInsetsController windowInsetsController = decorView.getWindowInsetsController();
windowInsetsController.hide(WindowInsets.Type.statusBars() | WindowInsets.Type.navigationBars());
// 监听窗口的系统边界变化
decorView.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener() {
@Override
public WindowInsets onApplyWindowInsets(View v, WindowInsets insets) {
// 隐藏状态栏和导航栏
WindowInsetsController windowInsetsController = v.getWindowInsetsController();
windowInsetsController.hide(WindowInsets.Type.statusBars() | WindowInsets.Type.navigationBars());
return insets;
}
});
在上面的代码中,首先获取窗口的根视图(即DecorView),然后设置全屏模式的标志,包括SYSTEM_UI_FLAG_LAYOUT_STABLE
、SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
、SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
、SYSTEM_UI_FLAG_HIDE_NAVIGATION
、SYSTEM_UI_FLAG_FULLSCREEN
和SYSTEM_UI_FLAG_IMMERSIVE_STICKY
。然后使用WindowInsetsController
类的hide()
方法隐藏状态栏和导航栏。最后,通过设置OnApplyWindowInsetsListener
监听窗口的系统边界变化,在边界发生变化时再次隐藏状态栏和导航栏。
希望以上代码示例对您有所帮助!