Google Playアプリ

Android15対応
(edge-to-edgeの対応)

この記事は約12分で読めます。
記事内に広告が含まれています。
スポンサーリンク

この記事は Androidスマホ用のアプリ開発の中で、
今後の開発で再使用性が高いと思われるコーディングをまとめたものです。
Java での開発経験、XML構文規則、Android のアプリ開発経験がある方を対象としています。
Android のアプリ開発でお役にたててれば、嬉しいです。
(これから Android のアプリ開発や Java での開発を始めたい方への案内は、
記事の最後で紹介します)

この記事のテーマ


Android15でデフォルトで適用されるedge-to-edgeに対応する

Android15のアップデート対象のXperiaのSIMフリーモデルです。

ポイント

Android15以上をターゲットとするアプリでいくつかの変更に対応する必要があります。
その中で変更の影響を受けるedge-to-edgeの対応について、実装方法を紹介いたします。

動作の変更点: Android 15 以上をターゲットとするアプリ

エッジ ツー エッジの適用

エッジ ツー エッジ(edge-to-edge)とは、全画面をアプリ領域として使うことができ、アプリを使っているときの没入感をより高められる機能です。
これまでは全画面モード(没入モード)としてれ、ステータスバーやナビゲーションバーの表示をコードで制御していました。
Android15ではアプリのtargetSdk35(Android15)にすると、強制的にエッジ ツー エッジが適用され、アプリの表示領域にステータスバーとナビゲーションバーが被さって表示されるようになります。
アプリの対応としては、ステータスバーとナビゲーションバーを表示するときにアプリ領域に被らないように制御するか、エッジ ツー エッジを無効にする方法があります。

エッジ ツー エッジを無効にする

ステータスバーとナビゲーションバーをアプリ領域に被らないようにするには大きくわけて2つの方法があります。
ひとつはWindowInsetsWindowMetricsCalculatorでレイアウトを制御する方法ですが、汎用的ではありません。
もうひとつがエッジ ツー エッジを無効にする方法で、現時点でもっとも簡単な方法です。

◎テーマ定義(themes.xml)

<resources
    xmlns:tools="http://schemas.android.com/tools">
    <style name="Theme.Assistants" parent="Theme.Design.NoActionBar">
        <item name="android:windowOptOutEdgeToEdgeEnforcement" tools:targetApi="35">true</item>
        :
    </style>
</resources>

スタイルタグ(style)にAndroid15の場合はwindowOptOutEdgeToEdgeEnforcementtrueに設定します。
サンプルでは親テーマがTheme.Design.NoActionBarのカスタムテーマとして定義しています。

◎マニフェスト定義(AndroidManifest.xml)

<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
    :
    <application
        :
        android:theme="@style/Theme.Assistants"
        :
    </application>
</manifest>

マニフェストにカスタムテーマをアプリのテーマとして定義します。
ステータスバーとナビゲーションバーをともに表示する場合はエッジ ツー エッジを無効化だけで対応は完了です。
Android10以前でナビゲーションバーを非表示にする場合は注意が必要です

Android10以前でナビゲーションバーを非表示にする場合

Android10以前でナビゲーションバーを非表示にする場合、setSystemUiVisibilityを使用します。
ナビゲーションバーを非表示にするレイアウト(SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION)を指定すると、システムバーの高さを考慮してレイアウトを計算、制御する必要があります。

  :
    // ナビゲーションバー非表示
    public void hideSystemUI() {
        if (FULLSCREEN) {
            if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R) {
                WindowInsetsController windowInsetsController = getWindow().getDecorView().getWindowInsetsController();
                if (windowInsetsController != null) {
                    windowInsetsController.hide(WindowInsets.Type.navigationBars());
                    windowInsetsController.setSystemBarsBehavior(WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE);
                }
            } else {
                View decorView = getWindow().getDecorView();
                decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                        | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                        | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                        | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
            }
        }
    }

サンプルではフラグ(FULLSCREEN)でナビゲーションバーを非表示にするか制御しています。

エッジ ツー エッジで非推奨の API またはパラメータを使用しています

edge-to-edgeに対応したアプリのリリース後、GooglePlay Consoleに「お客様のアプリは、エッジツーエッジで非推奨のAPIまたはパラメータを使用しています」とメッセージが表示されることがあります。
Android15で非推奨のAPIを使用していなくても、インポートしているライブラリに含まれている場合も対象です。
このメッセージはAndroid15で非推奨のAPIを使用しているライブラリを変更しないかぎり消せないようです。

このメッセージが表示されているアプリはTabLayoutを使用しています。
TabLayoutはライブラリ(com.google.android.material)に含まれています。
実際には非推奨のAPIを使用しているはTabLayoutではなく、dateoickerです。
アプリ自体はAndroid15で動作しているので、当面は使用するライブラリを変更する必要はないと思います。

今回は、ここまでです。

edge-to-edgeに対応しているAndroidアプリです。

誤字脱字、意味不明でわかりづらい、
もっと詳しく知りたいなどのご意見は、
このページの最後にある
コメントか、
こちらから、お願いいたします♪

ポチッとして頂けると、
次のコンテンツを作成する励みになります♪

ブログランキング・にほんブログ村へ

これからAndroidのアプリ開発やJavaでの開発を始めたい方へ

アプリケーション開発経験がない方や、アプリケーション開発経験がある方でも、Java や C# などのオブジェクト指向言語が初めての方は、Android のアプリ開発ができるようになるには、かなりの時間がかかります。
オンラインスクールでの習得を、強くおススメします。

未経験者からシステムエンジニアを目指すのに最適です。まずは無料相談から♪

未経験者からプログラマーを目指すのに最適です。まずは無料カウンセリングから♪

カリキュラムとサポートがしっかりしています。お得なキャンペーンとかいろいろやっています♪

ゲーム系に強いスクール、UnityやUnrealEngineを習得するのに最適です。まずは無料オンライン相談から♪

参考になったら、💛をポッチとしてね♪

スポンサーリンク
msakiをフォローする
スポンサーリンク

コメント欄

タイトルとURLをコピーしました