您可以通过调用 enableEdgeToEdge
在应用中启用全屏显示屏。这对大多数应用来说应该足够了。本指南介绍了如何在应用需要在不使用 enableEdgeToEdge
的情况下启用全屏显示功能。
以全屏布局应用
使用 WindowCompat.setDecorFitsSystemWindows(window,
false)
在系统栏后布置您的应用,如以下代码示例所示:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) WindowCompat.setDecorFitsSystemWindows(window, false) }
Java
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); WindowCompat.setDecorFitsSystemWindows(getWindow(), false); }
更改系统栏的颜色
在无边框布局中运行时,应用需要更改系统栏的颜色,以便可以看到下面的内容。应用执行完此步骤后,系统会在手势导航模式和按钮模式下处理界面的所有视觉保护。
- 手势导航模式:系统会应用动态配色自适应,其中系统栏的内容根据其后面的内容改变颜色。在以下示例中,导航栏中的手柄在位于浅色内容上方时变为深色,在深色内容上方时变为浅色。
- 按钮模式:系统会在系统栏(对于 API 级别 29 或更高级别)或透明系统栏(对于 API 级别 28 或更低级别)后应用半透明的纱罩。
![显示半透明系统栏的图片](https://developer.android.google.cn/static/images/guide/navigation/e2e-translucent-scrim.png?authuser=6&hl=da)
- 状态栏内容颜色:控制状态栏内容(例如时间和图标)的颜色。
![以状态栏内容颜色显示的图片](https://developer.android.google.cn/static/images/guide/navigation/e2e-status-color.png?authuser=6&hl=da)
您可以修改 themes.xml
文件,以设置导航栏的颜色,并视需要将状态栏设置为透明,将状态栏内容颜色设置为深色。
<!-- values-v29/themes.xml -->
<style name="Theme.MyApp">
<item name="android:navigationBarColor">
@android:color/transparent
</item>
<!-- Optional: set to transparent if your app is drawing behind the status bar. -->
<item name="android:statusBarColor">
@android:color/transparent
</item>
<!-- Optional: set for a light status bar with dark content. -->
<item name="android:windowLightStatusBar">
true
</item>
</style>
您可以直接使用 WindowInsetsController
API,但我们强烈建议您尽可能使用支持库 WindowInsetsControllerCompat
。您可以使用 WindowInsetsControllerCompat
API 而非 theme.xml
来控制状态栏的内容颜色。为此,请使用 setAppearanceLightNavigationBars()
函数,传入 true
以将导航栏的前景颜色更改为浅色,或者传入 false
以还原为默认颜色。
Kotlin
val windowInsetsController = ViewCompat.getWindowInsetsController(window.decorView) windowInsetsController?.isAppearanceLightNavigationBars = true
Java
WindowInsetsControllerCompat windowInsetsController = ViewCompat.getWindowInsetsController(getWindow().getDecorView()); if (windowInsetsController == null) { return; } windowInsetsController.setAppearanceLightNavigationBars(true);