13
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Android 15をターゲットとした時のEdge-to-Edgeを回避するwindowOptOutEdgeToEdgeEnforcement

Last updated at Posted at 2024-08-07

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
Screenshot_20240807_095444.png Screenshot_20240807_095250.png Screenshot_20240807_095327.png Screenshot_20240807_095352.png

(赤い部分が StatusBar の Inset、青い部分が NavigatonBar の Inset、それ以外はシステムのデフォルトの色)

用途

一時的な回避策でしかない(将来的に非推奨&無効になることが記載されている)ので基本的には Edge-to-Edge 対応を進める方がいいです。
ただこの API の使い道には、例えば OSS Licenses Gradle Plugin のような画面全体が外部ライブラリになっていてかつ Edge-to-Edge の対応が実装側でコントロールできない画面に対して、targetSdk 更新時に一時的に使うといったことが考えられます。

13
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?