【Kotlin/Android】Edge-to-Edgeを有効/無効/対応する方法!
この記事からわかること
- Kotlin/AndroidでEdge-to-Edgeを有効/無効に「する方法
index
[open]
\ アプリをリリースしました /
環境
- Android Studio:Meerkat
- Kotlin:2.0.21
- AGP:8.9.2
- Gradle:8.11.1
- Mac M1:Sequoia 15.4
Edge-to-Edgeとは?
「Edge-to-Edge」とはアプリのUIがステータスバーやナビゲーションバーなどのシステムバーの背後まで広がるレイアウトデザインのことを指します。Android15からは「Edge-to-Edge」がデフォルトで有効になるようになっているので注意が必要です。
公式リファレンス:Android15 エッジ ツー エッジの適用
Edge-to-Edgeを無効にする
Edge-to-Edgeでのレイアウトが意図せず、無効にしたい場合はstyleにandroid: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だと対応してくれるなど注意点もあるようです。
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。






