スプラッシュ・スクリーンって?
スプラッシュ・スクリーンとはAndroidのアプリを起動して、アプリが完全に起動するまでの間、別な画面を表示するアレです。よくあるのはゲーム等で「Now loading...」とか「起動中です・・・」とか表示するやつです。
Android12かはら標準で、アプリアイコンがスプラッシュ・スクリーンになっていますが、それ以前は自前で組み込まないといけません。ここではAndroid11で自前で組み込む方法を説明します。
参考URL:
本家Android Develppersスプラッシュ画面 (Android11まで)
Splash画面を実装する方法
まず、やり方には2通りあって
- Activityのテーマを変更する方法
- 別なActivityを用意する方法
があります。ゲームのようなより複雑、動きのあるスプラッシュ・スクリーンを実装したいのであれば、別なActivityを用意する方法のほうがよいでしょう。ここではActivityのテーマを変更する方法を説明します。
スプラッシュ画像を用意する
なんでもいいです。いらすとやから適当に、焦って走ってる会社員をダウンロードしてきました。これをスプラッシュ・スクリーンとして表示してみます。
これをAndroid Studioのres/drawable(v24)に配置します。v24付きのフォルダじゃないとダメです。
drawable(v24)にxmlを追加する。
res/drawable(v24)にsplash_drawable.xmlという名前でxmlを作成します
<?xml version="1.0" encoding="utf-8"?>
<layer-list
xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/white" />
<item
android:drawable="@drawable/run_businessman_aseru"
android:gravity="center"
/>
</layer-list>
android:drawable="@drawable/run_businessman_aseru"
の部分が上の焦って走っている会社員の画像のリソースです。
valuesにstyle.xmlを作成する
res/valuesにstyle.xmlを作成します
<resources xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Base application theme. -->
<style name="AppTheme.Splash" parent="Theme.AppCompat.DayNight.NoActionBar">
<item name="android:windowBackground">@drawable/splash_drawable</item>
</style>
</resources>
@drawable/splash_drawable
の部分が、上のsplash_drawable.xmlのリソースです。リンクしてますね。
AndroidManifest.xmlを編集する
android:themeを追加します。
<activity
android:name=".MainActivity"
android:exported="true"
android:theme="@style/AppTheme.Splash">
<intent-filter>
(・・・中略)
</intent-filter>
</activity>
@style/AppTheme.Splash
の部分が、上のstyle.xmlの
style name="AppTheme.Splash" ・・・
とリンクしています。
MainActivityを編集する。
MainActivityはsetContentViewでレイアウトを適用する前に、themeを適用してやる必要があります。
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setTheme(R.style.Theme_SplashKotlin)
Thread.sleep(1000) // 早すぎるのでsleep
setContentView(R.layout.activity_main)
}
}
ここでちょっとよくわからないのが、R.style.Theme_SplashKotlinはthemes.xmlとリンクしています。このthemes.xmlからstyles.xmlにたどり着く経路がよくわかりません。
スプラッシュが消えるのが早すぎるのでsleepを入れました。本当はここで、色々な初期化処理が入るのだと思います。
完成形はgitHubに置きました。