手动设置无边框显示

您可以通过调用 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);
}

更改系统栏的颜色

在无边框布局中运行时,您的应用需要 以便显示其下的内容。发布应用后 执行此步骤后,系统会处理用户的所有视觉保护 手势导航模式和按钮模式下的界面。

  • 手势导航模式:系统会在 系统栏的内容会根据背后的内容而改变颜色 。在以下示例中,导航栏中的手柄将更改为 在浅色内容上方呈现为深色,在浅色内容上方呈现为浅色 深色内容。
。 <ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
图 1.手势导航中的颜色变化 模式。
  • 按钮模式:系统会将半透明 纱罩 在系统栏后面(适用于 API 级别 29 或更高版本)或透明系统后 bar(适用于 API 级别 28 或更低级别)。
。 <ph type="x-smartling-placeholder">
</ph> 显示半透明系统栏的图片
图 2.系统栏后面的半透明纱罩。
  • 状态栏内容颜色:控制状态栏内容的颜色,如 显示为时间和图标
。 <ph type="x-smartling-placeholder">
</ph> 显示状态栏内容颜色的图片
图 3.状态栏内容颜色。

您可以修改 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);