Androidで簡易splashを実装する

2017/09/12

以前はアンチパターン扱いされていたスプラッシュ画面ですが、最近はMaterial design guidelinesでも"Launch screens"として認められる(?)ようになりました。

もちろんむやみに使うべきじゃなくて、“placeholder UI"か"Branded launch screens"に限るよ、ということのようです。

placeholder UIはアプリが操作可能になるまでダミーの画面を出しておくパターン。起動時の処理が重くなっちゃうときに認知上の待たされ感を軽減するために使うパターンです。

Branded launch screensはブランド認知のためにアプリやブランドのロゴ、名称なんかを表示するパターンですね。要するにこれ普通のスプラッシュじゃない?という気もしますが...

そんなわけで市民権を取り戻したスプラッシュ、ベタに実装すると専用Activityを作る形になりますが、簡易的であればthemeを切り替えるのがシンプルです。 Activityで実装するとスプラッシュの起動自体にちょっと待たされるので、なるべくtheme方式で済ませるのがよいかと思います。

はじめに、splash用のthemeを用意しておきます。

<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
  <item name="android:windowBackground">@color/colorPrimary</item>
  <!-- 画像にしたい場合はこんな感じ -->
  <!-- <item name="android:windowBackground">@drawable/ic_launcher</item> -->
</style>

drawableを単純な画像じゃなくてxmlのlayer-listで作れば複雑なレイアウトも作れるはず。

次に、起動時に呼ばれるActivityのthemeをsplash用のものにしておきます。

<activity
  android:name="com.example.MainActivity"
  android:theme="@style/SplashTheme">
    <intent-filter>
      <action android:name="android.intent.action.MAIN"/>
      <category android:name="android.intent.category.LAUNCHER"/>
    </intent-filter>
</activity>

あとはActivityのonCreate先頭でthemeを本来のものに差し替えればOK。

@Override
protected void onCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);
  setTheme(R.style.AppTheme);
  setContentView(R.layout.activity_main);
  ...
}

参考URL




関連(するかもしれない)記事


おススメ