ステータスバーのUIが崩れる?Android 15で強制適用されるEdge-to-edgeを無効化する方法

はじめに

こんにちは、アプリ開発支援部の小林です!

今回は、Android 15で強制適用される「Edge-to-Edge」表示と、それによってステータスバーのUI崩れが発生する問題について解説し、そのEdge-to-Edgeを無効化する方法を紹介します。

本記事は、「エムティーアイ Blog Summer 2025」の8月6日分の記事となります。

※本記事で紹介するEdge-to-Edgeの無効化は、既存のUIを保持するためにあえてEdge-to-Edgeの自動適用を無効化する対応となります。
Android 15以降の新しいEdge-to-Edgeデザインを積極的に活用する場合は無効化せず、適切に画面レイアウトを調整することも検討が必要です。

背景

先日、既存のAndroidアプリ(Viewベース)にて、Android SDKバージョンを15(APIレベル35)にアップデートする作業を行いました。

その際、アプリのステータスバー(スマホアプリ上部の時刻や電池残量が表示されている箇所)のUIが崩れてしまいました。
以下のようにステータスバーがアプリの画面と重なってしまい、既存のアプリで設定していたステータスバーの色も変わってしまいました。

Android 15未満 Android 15

一体、なぜAndroidのSDKバージョンを15に上げると、ステータスバーのUIが崩れてしまうのでしょうか?

原因

調査を行ったところ、Android 15からデフォルトで適用される「Edge-to-Edge」が原因だと判明しました。

Edge-to-edgeとは、システムUI(ステータスバーやナビゲーションバー)を透過させ、アプリのコンテンツを画面全体(端から端まで)に描画するレイアウト方針です。
従来は開発者が明示的に有効化する必要がありましたが、Android 15以降では一部の条件下で自動的に強制適用されるようになっているため、今回のようにステータスバーのUIが崩れてしまうという現象が発生します。

解決策

SDKのバージョンを15に上げつつ、既存のステータスバーのUIを保持するには、Edge-to-edgeの強制適用を明示的に無効化する必要があります。

具体的には、res/values/themes.xml などに以下のようにしてEdge-to-edgeを無効化する処理を追加します:

<resources xmlns:tools="http://schemas.android.com/tools">
    <!-- Base application theme. -->
    <style name="Base.Theme.MyApplication" parent="Theme.Material3.DayNight.NoActionBar">
        <!-- Customize your light theme here. -->
        <!-- <item name="colorPrimary">@color/my_light_primary</item> -->

+       <!-- Edge-to-edgeを無効化する処理を追加 -->
+       <item name="android:windowOptOutEdgeToEdgeEnforcement" tools:targetApi="35">true</item>
    </style>

    <style name="Theme.MyApplication" parent="Base.Theme.MyApplication" />
</resources>

この設定を入れることにより、Android 15以降で自動的に適用される Edge-to-edge のレイアウト強制が無効化され、以下のようにAndroid 15でも従来どおりのステータスバーのUIを表示することができるようになります。

まとめ

Android 15では、Edge-to-edge が強制的に適用され、ステータスバーのUIが崩れる発生する可能性があります。 既存のAndroidのViewベースのアプリにおいて、SDKバージョンを15に上げたことによるレイアウト崩れを防ぎたい場合は、android:windowOptOutEdgeToEdgeEnforcement の設定を追加することで対応可能です。