はじめに
Android15 から edge-to-edge
がデフォルトになり、意図しない挙動になっていないかの確認を行ってみました。
確認は、弊社で公開している 家計簿 アプリで行いました。
変更内容の確認
変更点としては、以下になります。
-
targetSdk
を35
に変更するとedge-to-edge
が Android15 で対応していないアプリでも適用されること -
M3 を適用している場合、自動的に
Insets
を適用するため、特段対応が不要であること -
M2 を適用している &
edge-to-edge
対応していない場合、自動的にInsets
が適用されないため、手動での対応が必要であること
実際に動かしたときの確認
家計簿 は、M3 を適用してアプリを作成しているため、自動で適用されるはずですが、確認していきます。
確認は、以下 OS のエミュレーターで行いました。
- Android14
- Android15
targetSdk 34 で動かしたとき
Android14 | Android15 |
---|---|
targetSdk を上げていないため、挙動に差異はありませんでした。
※ StatusBar の大きさに違いはありますが、これは 実機の Android15 では発生していないため、エミュレーターの問題です。
targetSdk 35 で動かしたとき
Android14 | Android15 |
---|---|
M3
を適用しているため、対応不要で edge-to-edge
が適用されていました。
ただし、Android15 で以下の気になるところがありました。
-
BottomSheet
がNavigation bar
の領域分下がるため、閉じた後に開くことがしづらい -
adjustResize
を設定しているにも関わらず、ソフトウェアキーボードでアプリの内容が隠れる
これは対応が必要のため、次のセクションで説明します。
-
Status Bar
の情報が白地に白文字でライトモード時に見えなくなっている
これは、 OS 上の問題なのかもしれませんので、もう少し待ってみます。
BottomSheetが下がることソフトウェアキーボード内にアプリ内容が隠れることについて
If your app is using views and BottomSheet, SideSheet or custom containers, apply padding using ViewCompat.setOnApplyWindowInsetsListener. For RecyclerView, apply padding using this listener and also add clipToPadding="false".
上記から、WindowInset
が自動で適用されない模様で、 Compose では以下を追加して対応します。
※ ドキュメントを閲覧した限り、そのように解釈しましたが、もし異なっていましたらコメント等でご指摘ください。
Box(
modifier = modifier = Modifier.safeDrawingPadding(),
...
) {
safeDrawingPadding は、ステータスバー、ナビゲーションバー、IMEのスペース分、適用されます。
変更したところ以下のように対応できました。
閉じているときの BottomSheet
対応前 | 対応後 |
---|---|
ソフトウェアキーボード
対応前 | 対応後 |
---|---|
まとめ
今回確認したアプリでは、 M3
を使用していたため、特段大きな変更がないため、修正工数もほとんどかからないことがわかりました。
ですが、 M2
を使用している場合は、手動で Insets
を適用する必要があるため、一度 targetSdk
を上げてみると良いかと思います。
特に大規模なアプリの場合は、対応に工数がかかると思いますので、早めに確認した方が良さそうです。