Android 15 をターゲットにした場合、Edge-to-Edge が強制されます。
強制的な Edge-to-Edge を一時的に回避するために windowOptOutEdgeToEdgeEnforcement という API がしれっと用意されているので、その API について調べてみました。
使い方
Activity の theme に windowOptOutEdgeToEdgeEnforcement
を設定することでその Activity に対して Edge-to-Edge を無効にできます。
<style name="Theme.App.Licenses" parent="Theme.AppCompat.DayNight">
...
<item name="android:windowOptOutEdgeToEdgeEnforcement" tools:targetApi="35">true</item>
</style>
Activity のコードで enableEdgeToEdge
を呼んでいる場合は windowOptOutEdgeToEdgeEnforcement
を設定していたとしても Edge-to-Edge が有効になります。
targetSdk 34 | targetSdk 35 | targetSdk 35 + windowOptOutEdgeToEdgeEnforcement | targetSdk 35 + windowOptOutEdgeToEdgeEnforcement + enableEdgeToEdge |
---|---|---|---|
(赤い部分が StatusBar の Inset、青い部分が NavigatonBar の Inset、それ以外はシステムのデフォルトの色)
用途
一時的な回避策でしかない(将来的に非推奨&無効になることが記載されている)ので基本的には Edge-to-Edge 対応を進める方がいいです。
ただこの API の使い道には、例えば OSS Licenses Gradle Plugin のような画面全体が外部ライブラリになっていてかつ Edge-to-Edge の対応が実装側でコントロールできない画面に対して、targetSdk 更新時に一時的に使うといったことが考えられます。