新的 Android API 改变了应用全屏的方式,网上搜到的全屏代码都不管用了,甚至 谷歌自己的教程 都没有更新,看了 API 文档才研究明白最新代码怎么写。本篇讲述两种新的全屏方式,一种保留状态栏文字的全屏,一种隐藏状态栏的全屏。
保留状态栏,适配全面屏 {#保留状态栏,适配全面屏}
默认情况下,应用界面不会延伸到系统状态栏、导航栏、导航条等区域,这会很丑,要想适配全面屏显示,在 Android 14 中,可以用一行代码简单实现。
|---------------|------------------------------------------------------------------------|
| 1 2 3
| // import androidx.activity.enableEdgeToEdg enableEdgeToEdge()
|
隐藏状态栏,完全全屏 {#隐藏状态栏,完全全屏}
适配全面屏并不会隐藏系统状态栏、导航栏、导航条,如果想实现完全全屏,老办法一般是调用 setSystemUiVisibility()
,然而这个方法在 14 中已经弃用了,获取 InsetsController
的 ViewCompat.getWindowInsetsController()
方法也被弃用了,最新的写法是:
|---------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9
| // import androidx.core.view.WindowCompat // import androidx.core.view.WindowInsetsCompat // import androidx.core.view.WindowInsetsControllerCompat val windowController = WindowCompat.getInsetsController(window, window.decorView) // 应用全屏时,用户仍然可以从屏幕顶部下拉唤出状态栏,此行代码实现当用户唤出状态栏后,自动隐藏状态栏 windowController.systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE // 隐藏包括状态栏、导航栏、caption bar 在内的所有系统栏 windowController.hide(WindowInsetsCompat.Type.systemBars())
|