您可以通过调用
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 或更高版本)或透明系统后 bar(适用于 API 级别 28 或更低级别)。
![显示半透明系统栏的图片](https://developer.android.google.cn/static/images/guide/navigation/e2e-translucent-scrim.png?authuser=9&hl=sr)
- 状态栏内容颜色:控制状态栏内容的颜色,如 显示为时间和图标
![显示状态栏内容颜色的图片](https://developer.android.google.cn/static/images/guide/navigation/e2e-status-color.png?authuser=9&hl=sr)
您可以修改 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);