Androidアプリの起動画面の設定

Jetpack Composeでアプリの起動画面(スプラッシュスクリーン)の画像を設定するには、androidx.core:core-splashscreen API を使用するのが現在の推奨方式です。

ComposeのUIコード(@Composable)で自作すると、アプリ読み込みの瞬間に一瞬白い画面(またはテーマの背景色)が挟まる原因になります。そのため、Androidシステム標準のスプラッシュ機能に画像を登録し、それをMainActivityに紐付ける手順を踏みます。

1. 依存関係の追加

build.gradle.kts (Module :app) の dependencies にライブラリを追加します。

dependencies {
    implementation("androidx.core:core-splashscreen:1.0.1") // バージョンは最新のものを使用してください
}

2. 起動画面のテーマ設定 (XML)

res/values/themes.xml(または styles.xml)に、起動画面専用のテーマを定義します。表示したい画像はあらかじめ res/drawable に配置しておきます。

<resources>
    <!-- 起動画面用のテーマ。Theme.SplashScreen を継承する -->
    <style name="Theme.App.Starting" parent="Theme.SplashScreen">
        <!-- 起動画面の背景色 -->
        <item name="windowSplashScreenBackground">@color/white</item>
        <!-- 中央に表示する画像(アイコン) -->
        <item name="windowSplashScreenAnimatedIcon">@drawable/my_splash_logo</item>
        <!-- 起動画面が終わった後に適用する、アプリ本来のメインテーマ -->
        <item name="postSplashScreenTheme">@style/Theme.MyComposeApp</item>
    </style>
</resources>

3. マニフェストへの登録

AndroidManifest.xml を開き、対象となる MainActivity(または 全体)のテーマを、今作成した起動画面用テーマに変更します。

<activity
    android:name=".MainActivity"
    android:exported="true"
    android:theme="@style/Theme.App.Starting"> <!-- ここを設定 -->
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

4. MainActivityでの呼び出し

MainActivity.kt の onCreate 内で、super.onCreate() より前、かつ setContent より前に installSplashScreen() を呼び出します。これで自動的にテーマが切り替わり、Jetpack Composeの画面へと遷移します。

class MainActivity : ComponentActivity() {
    override class onCreate(savedInstanceState: Bundle?) {
        // super.onCreate() より前に必ず呼び出す
        val splashScreen = installSplashScreen()
        super.onCreate(savedInstanceState)
        
        setContent {
            MyComposeAppTheme {
                // ここからJetpack ComposeのメインUI
                MainScreen()
            }
        }
    }
}

💡 さらに詳細な制御をしたい場合

  • 画像の表示時間を延ばしたい場合(データの初期読み込みを待ちたいとき)
    初期化処理(ViewModelなどでのAPI通信やDB読み込み)が終わるまで起動画面を維持するには、setKeepOnScreenCondition を使用します。
splashScreen.setKeepOnScreenCondition {
    // viewModel.isLoading が true の間は起動画面を表示し続ける
    viewModel.isLoading.value
}
  • アイコン画像のサイズ制約
    Androidの仕様上、中央に表示される画像は丸型のコンテナ(仕様上、直径160dp〜284dpなど)の中に収まるように自動調整されます。全画面に1枚の絵をドカンと表示するようなデザインは、現在Googleの公式スプラッシュデザインガイドラインで非推奨とされているため、基本は「背景色+中央ロゴ」の組み合わせで作成してください。

コメント

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