Calling [`enableEdgeToEdge`](https://developer.android.com/reference/androidx/core/view/WindowCompat#enableEdgeToEdge(android.view.Window)) encapsulates the logic needed to be truly
[backward compatible](https://medium.com/androiddevelopers/is-your-app-providing-a-backward-compatible-edge-to-edge-experience-2479267073a0) and is therefore the recommended way to set up an
edge-to-edge display. Refer to the [Compose](https://developer.android.com/develop/ui/compose/system/insets-ui) and [Views](https://developer.android.com/develop/ui/views/layout/edge-to-edge) documentation
instead of this guide for the modern way to go edge-to-edge using
`enableEdgeToEdge`.

While not recommended, if your app must manually set up an edge-to-edge display
you can follow these steps:

1. Call `WindowCompat.setDecorFitsSystemWindows(window, false)`.
2. Set the system bars to transparent.
3. Handle insets.

## Lay out your app in full screen

Use [`WindowCompat.setDecorFitsSystemWindows(window, false)`](https://developer.android.com/reference/androidx/core/view/WindowCompat#setDecorFitsSystemWindows(android.view.Window,%20boolean))
to lay out your app behind the system bars, as shown in the following code
example:  

### Kotlin

```kotlin
override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)
  WindowCompat.setDecorFitsSystemWindows(window, false)
}
```

### Java

```java
@Override
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  WindowCompat.setDecorFitsSystemWindows(getWindow(), false);
}
```

## Change the color of the system bars

When manually creating an edge-to-edge layout for Android 14 and older, your app
must also make the system bars transparent.

You can edit the `themes.xml` file to set the color of the status and navigation
bar as transparent and change the status bar icon color.  

    <!-- 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>

| **Note:** If you prefer to disable automatic content protection on Android 10 (API level 29) or later, set [`android:enforceNavigationBarContrast`](https://developer.android.com/reference/android/view/Window#isNavigationBarContrastEnforced()), [`android:enforceStatusBarContrast`](https://developer.android.com/reference/android/view/Window#isStatusBarContrastEnforced()), or both to `false` in your theme.

You can use the `WindowInsetsControllerCompat` API instead of
`theme.xml` to control the status bar's content color. To do so, use the
[`setAppearanceLightNavigationBars()`](https://developer.android.com/reference/androidx/core/view/WindowInsetsControllerCompat#setAppearanceLightNavigationBars(boolean))
function, passing in `true` to change the foreground color of the navigation to
a light color or `false` to revert to the default color.  

### Kotlin

```kotlin
val windowInsetsController =
      ViewCompat.getWindowInsetsController(window.decorView)

windowInsetsController?.isAppearanceLightNavigationBars = true
```

### Java

```java
WindowInsetsControllerCompat windowInsetsController =
      ViewCompat.getWindowInsetsController(getWindow().getDecorView());
if (windowInsetsController == null) {
    return;
}

windowInsetsController.setAppearanceLightNavigationBars(true);
```

## Handle insets

Finally, your app must to handle insets so that critical UI avoids the
system bars and display cutout. Refer to the [Compose](https://developer.android.com/develop/ui/compose/system/insets-ui) and [Views](https://developer.android.com/develop/ui/views/layout/edge-to-edge)
documentation to learn how to handle insets.