【Kotlin/Android】Edge-to-Edgeを有効/無効/対応する方法!

【Kotlin/Android】Edge-to-Edgeを有効/無効/対応する方法!

この記事からわかること

  • Kotlin/AndroidEdge-to-Edge有効/無効に「する方法

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

環境

Edge-to-Edgeとは?

Edge-to-Edge」とはアプリのUIがステータスバーやナビゲーションバーなどのシステムバーの背後まで広がるレイアウトデザインのことを指します。Android15からは「Edge-to-Edge」がデフォルトで有効になるようになっているので注意が必要です。

公式リファレンス:Android15 エッジ ツー エッジの適用

Edge-to-Edgeを無効にする

Edge-to-Edgeでのレイアウトが意図せず、無効にしたい場合styleandroid:windowOptOutEdgeToEdgeEnforcement属性を付与しtrueを指定すればEdge-to-Edgeを無効にすることができます。Android15からはデフォルトでONになっているので無効にしたい場合は明示的にこれを指定する必要があります。

<resources xmlns:tools="http://schemas.android.com/tools">
    <style name="Base.Theme.XXXXXXXX" parent="Theme.Material3.DayNight.NoActionBar">
        <!-- Edge-to-Edgeを無効にする -- >
        <item name="android:windowOptOutEdgeToEdgeEnforcement" tools:targetApi="35">true</item>
    </style>
</resources>

公式リファレンス:windowOptOutEdgeToEdgeEnforcement

Android 16(API36)以上では使えない

一時的にEdge-to-Edgeを無効化できるandroid:windowOptOutEdgeToEdgeEnforcement属性はターゲットがAndroid 16(API36)の場合は属性自体が非推奨で無効になるため注意してください。修正期間としてAndroid15の間だけ無効にできるようにしてくれているだけのようです。

公式リファレンス:エッジ ツー エッジのオプトアウトの廃止

Android14(API34)以下でEdge-to-Edgeを有効にする

公式リファレンス:Display content edge-to-edge in views

Android14(API34)以下でEdge-to-Edgeを有効にしたい場合はenableEdgeToEdgeメソッドを呼び出せばOKです。

override fun onCreate(savedInstanceState: Bundle?) {
  enableEdgeToEdge()
  super.onCreate(savedInstanceState)
  ...
}

Edge-to-edgeに対応する

無効にする対応はあくまで暫定的な一時凌ぎなので明示的に対応しておいた方が良いです。対応方法は上部のシステムバーのサイズを取得しそのサイズ分余白を追加する方法がおすすめです。


override fun onCreate(savedInstanceState: Bundle?) {
      super.onCreate(savedInstanceState)
      // システムバーの余白を適用
      ViewCompat.setOnApplyWindowInsetsListener(binding.root) { view, insets ->
          val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
          // パディングを追加(上:ステータスバー, 下:ナビゲーションバー)
          view.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
          insets
      }
}

またJetpack Composeを使用してMaterial対応していた場合は明示的に対応する必要はなく、自動で調節してくれるようですが、SurfaceではなくScaffoldだと対応してくれるなど注意点もあるようです。

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

Search Box

Sponsor

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index