たけぼーの備忘録

暇を持て余した人間の無意味なブログ

Androidで起動時にアイコンを表示する

お久しぶりです、たけぼーです。


今日は、タイトル通り起動時にアイコンを表示させることを考えます。

例えば、LINEを起動したら、緑の背景にLINEのマークが表示され、そのあとメイン画面に切り替わりますよね。
今回はあれを自分でやってみよう!ってなわけです。


起動時に表示されるあの画面をスプラッシュ画面と言います。
実は、例の画面がスプラッシュというなんて知らなかったんです・・・
ですので、「あれ作りたいなー」と軽い気持ちで検索しても、全然出てこなかった 笑
スプラッシュ画面で検索すると一発なんですけどね 笑


検索すると、Activityを起動させてスプラッシュを表示させ、そのあとMainActivityにintentする、っていうものがたくさん出てきます。
こうすると、起動したときにスプラッシュを表示しながら、何かの処理を行うことができるようです。
例えば、初期データのダウンロードなんかを行うことができますね(たぶん)。

しかし、これでは、スプラッシュの前に一瞬ブランクが表示されるようです。
これでは少しダサい気がします。
今回の私の目的は、起動時にそのブランクが表示されるのをスプラッシュでごまかすことが目的だったりするので、この方法ではまずいんです。

ということで他の方法を探したところ、ありました。画期的な方法が(たぶん自分が知らなかっただけ)。


ということで、その画期的(?)な実装方法をメモしておきます。

実装

まず最初に、背景色を決めてcolors.xmlに記述しておきます。

colors.xml

<resources>
    ...
    <color name="colorBackground">#fafafa</color>
</resources>

また、styles.xmlにスプラッシュ画面用のテーマを用意します。
以下のテーマを追記します。

styles.xml

<style name="SplashTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowBackground">@drawable/splash</item>
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
</style>

そして、drawable内にsplash.xmlを作成し、以下のようにします。

splash.xml

<?xml version="1.0" encoding="utf-8"?>
<layer-list
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:opacity="opaque">

    <item
        android:drawable="@color/colorBackground"/>
    <item
        android:gravity="center">
        <bitmap android:src="@mipmap/ic_launcher"/>
    </item>

</layer-list>

最後に、AndroidManifest.xmlのMainActivityの部分を以下のようにします。

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

要するに、themaを追記するだけです。

これだけで、簡単にスプラッシュ画面が出来上がります!
とても簡単ですよね!?

注意点

最後に注意が一つ。

これでスプラッシュを作ると、MainActivityの背景がスプラッシュ画面と同じになってしまいます。
ですから、activity_main.xml内のトップレベルのところで、背景色を指定してください。
例えばこんな感じ。

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:autofit="http://schemas.android.com/apk/res-auto"
        android:id="@+id/activity_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context="com.hoge.hoge.MainActivity"
        android:background="#fafafa">

これで、背景色は固定され、スプラッシュ後はいつものMainActivityが表示されます。

じつは、この背景色の指定をしていなかったため、MainActivityの背景が変な色になって困りました・・・
まあ、未熟者の私がスプラッシュに手を出したからですね 笑


今回は、こちらのページを参考にさせていただきました。
sakebook.hatenablog.com


ということで今回はここまで。ではまた。