LoginSignup
0
0

More than 1 year has passed since last update.

Androidでスプラッシュ・スクリーンを出してみる

Posted at

スプラッシュ・スクリーンって?

スプラッシュ・スクリーンとはAndroidのアプリを起動して、アプリが完全に起動するまでの間、別な画面を表示するアレです。よくあるのはゲーム等で「Now loading...」とか「起動中です・・・」とか表示するやつです。
Android12かはら標準で、アプリアイコンがスプラッシュ・スクリーンになっていますが、それ以前は自前で組み込まないといけません。ここではAndroid11で自前で組み込む方法を説明します。

参考URL:
本家Android Develppersスプラッシュ画面 (Android11まで)
Splash画面を実装する方法

まず、やり方には2通りあって

  • Activityのテーマを変更する方法
  • 別なActivityを用意する方法

があります。ゲームのようなより複雑、動きのあるスプラッシュ・スクリーンを実装したいのであれば、別なActivityを用意する方法のほうがよいでしょう。ここではActivityのテーマを変更する方法を説明します。

スプラッシュ画像を用意する

なんでもいいです。いらすとやから適当に、焦って走ってる会社員をダウンロードしてきました。これをスプラッシュ・スクリーンとして表示してみます。
run_businessman_aseru.png
これをAndroid Studioのres/drawable(v24)に配置します。v24付きのフォルダじゃないとダメです。
Screenshot_20221126_111914.png

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_SplashKotlinthemes.xmlとリンクしています。このthemes.xmlからstyles.xmlにたどり着く経路がよくわかりません。
スプラッシュが消えるのが早すぎるのでsleepを入れました。本当はここで、色々な初期化処理が入るのだと思います。

完成形はgitHubに置きました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0