Slide 1

Slide 1 text

Android15のための Edge-to-edge対応 2024/11/20 note Mobile Tech Talk #1 / トリ

Slide 2

Slide 2 text

⾃⼰紹介 トリ 北海道からフルリモートしてます ⿃モチーフのものが好きです Androidエンジニア

Slide 3

Slide 3 text

⽬次 1. Edge-to-edgeとは? 2. Edge-to-edgeに対応していないとどうなる? 3. 対応しなくてもいいパターン 4. 対応するパターン TIPS:Android15未満もEdge-to-edge対応したい⼈へ TIPS:対応する時間がない⼈へ

Slide 4

Slide 4 text

Android15 が 10⽉15⽇ にリリースされました! https://blog.google/intl/ja-jp/products/android-chrome-play/android-15/

Slide 5

Slide 5 text

Android15をターゲットにした場合の変更点 ● フォアグラウンド サービスの変更 ● 安全なバックグラウンド アクティビティの起動 ● より安全なインテント ● ウィンドウ インセットの変更 参照:https://developer.android.com/about/versions/15/behavior-changes-15?hl=ja etc…

Slide 6

Slide 6 text

Android15をターゲットにした場合の変更点 ● フォアグラウンド サービスの変更 ● 安全なバックグラウンド アクティビティの起動 ● より安全なインテント ● ウィンドウ インセットの変更 参照:https://developer.android.com/about/versions/15/behavior-changes-15?hl=ja etc…

Slide 7

Slide 7 text

ウィンドウ インセットの変更 Android 15 のウィンドウ インセットに関連する変更点は 2 つあります。エッジ ツー エッジがデフォルトで適⽤さ れます。もう 1 つは、システムバーのデフォルト構成な どの構成の変更です。 https://developer.android.com/about/versions/15/behavior-changes-15?hl=ja#window-insets より

Slide 8

Slide 8 text

ウィンドウ インセットの変更 Android 15 のウィンドウ インセットに関連する変更点は 2 つあります。エッジ ツー エッジがデフォルトで適⽤さ れます。もう 1 つは、システムバーのデフォルト構成な どの構成の変更です。 https://developer.android.com/about/versions/15/behavior-changes-15?hl=ja#window-insets より ?

Slide 9

Slide 9 text

Edge-to-edge(エッジツーエッジ)とは? アプリの画⾯をシステムバー (ステータスバー‧ナビゲーションバー‧字幕バー) まで拡張して表⽰する機能 画像:https://developer.android.com/develop/ui/compose/layouts/insets?hl=ja

Slide 10

Slide 10 text

Edge-to-edgeに対応していないとどうなる? targetSdkVersion = 34

Slide 11

Slide 11 text

Edge-to-edgeに対応していないとどうなる? targetSdkVersion = 35

Slide 12

Slide 12 text

Edge-to-edgeに対応していないとどうなる? targetSdkVersion = 35

Slide 13

Slide 13 text

Edge-to-edgeに対応していないとどうなる? targetSdkVersion = 35

Slide 14

Slide 14 text

Edge-to-edgeに対応していないとどうなる? targetSdkVersion = 35

Slide 15

Slide 15 text

Edge-to-edgeに対応していないとどうなる? targetSdkVersion = 35

Slide 16

Slide 16 text

Edge-to-edge対応しよう!

Slide 17

Slide 17 text

Q. 全画⾯で対応が必要?

Slide 18

Slide 18 text

A. 対応が不要なパターンもある

Slide 19

Slide 19 text

対応しなくてもいいパターン / JetpackCompose Material3(androidx.compose.material3)を使⽤している TopAppBar statusBarsサポート BottomAppBar, NavigationBar navigationBarsサポート Scaffold systemBarsサポート ※PaddingValuesを⼦に渡す

Slide 20

Slide 20 text

対応しなくてもいいパターン / AndroidView Material(com.google.android.material)を使⽤している ● 公式ドキュメントによると、ほぼ対応しているらしい※ ● AppBarLayoutやBottomSheetは対応必須(後述) ※ https://developer.android.com/about/versions/15/behavior-changes-15?hl=ja#not-edge-to-edge

Slide 21

Slide 21 text

Q. 対応するパターンは?

Slide 22

Slide 22 text

対応するパターン / JetpackCompose Material2(androidx.compose.material)を使⽤している ● ライブラリが1.6.0以降 → 引数でwindowInsetsを設定できる ● Material3に移⾏がオススメ

Slide 23

Slide 23 text

対応するパターン / JetpackCompose

Slide 24

Slide 24 text

対応するパターン / JetpackCompose

Slide 25

Slide 25 text

対応するパターン / JetpackCompose

Slide 26

Slide 26 text

対応するパターン / JetpackCompose Material3でScaffoldやAppBarなどを使⽤していない ● 任意のコンポーザブルのPaddingでWindowInsetsを設定する

Slide 27

Slide 27 text

対応するパターン / JetpackCompose

Slide 28

Slide 28 text

対応するパターン / JetpackCompose

Slide 29

Slide 29 text

対応するパターン / JetpackCompose

Slide 30

Slide 30 text

対応するパターン / AndroidView Materialコンポーネントを使⽤している ● AppBarLayoutに android:fitsSystemWindows="true" を追加する

Slide 31

Slide 31 text

対応するパターン / AndroidView

Slide 32

Slide 32 text

対応するパターン / AndroidView

Slide 33

Slide 33 text

対応するパターン / AndroidView Materialコンポーネントを使⽤していない or MaterialのBottomSheetやSideSheetなどを使⽤している ● ViewCompat.setOnApplyWindowInsetsListener() を設定する

Slide 34

Slide 34 text

対応するパターン / AndroidView

Slide 35

Slide 35 text

対応するパターン / AndroidView

Slide 36

Slide 36 text

対応するパターン / AndroidView

Slide 37

Slide 37 text

対応するパターン / AndroidView

Slide 38

Slide 38 text

TIPS:Android15未満もEdge-to-edge対応したい⼈へ enableEdgeToEdge() を追加する

Slide 39

Slide 39 text

TIPS:対応する時間がない⼈へ Activityのthemeに windowOptOutEdgeToEdgeEnforcement=true を追加すれば、Android14以下と同じ挙動になる ※ 将来廃止される予定なので、一時的な回避策として使おう

Slide 40

Slide 40 text

ありがとうございました! noteにEdge-to-edgeの記事あります

Slide 41

Slide 41 text

参考 ● https://developer.android.com/about/versions/15/behavior-changes-15? hl=ja#window-insets ● https://developer.android.com/develop/ui/views/layout/edge-to-edge?hl =ja ● https://developer.android.com/develop/ui/compose/layouts/insets?hl=ja ● https://developer.android.com/reference/android/R.attr#windowOptOut EdgeToEdgeEnforcement