Activityの切り替えとオプションメニューを持つAndroidアプリ作成」で作成したアプリををベースに、次の機能を持つAndroidアプリをAndroid Studioを使ってJava言語で作成し、Android Emulatorで実行します。

  • 起動時のSplash Screen
  • グローバル変数によるデータ共有

起動時のSplash Screenの作成

Android アプリの起動に表示するSplash Screenを作成します。

  1. Sprash Screenに表示させるロゴ画像を「drawable」フォルダに格納します。「drawable」フォルダの位置は次のように「\AndroidStudioProjects\ScreenTransition\app\src\main\res\drawable」になっています。
  2. 次のように「res」→「drawable」フォルダ上で右クリックし、「New」→「file」をクリックし、開いた「New File」でファイル名「launcher_screen.xml」を作成します。
  3. 「res」→「values」のxmlファイル「colors.xml」に「#00000000」を作成します。
  4. 「res」→「drawable」のSprash Screen用のxmlファイル「launcher_screen.xml」に次のコードを作成します。
  5. <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    
         <item android:drawable="@color/Transparent" />
    
        <item>
            <bitmap
                android:gravity="center"
                android:src="@drawable/tomosoft_logo" />
        </item>
    
    </layer-list>
    
  6. Sprash Screen用のテーマを「res」→「values」の「styles.xml」に設定します。
  7.  
    <style name="AppTheme.Launcher" parent="AppTheme">
         <item name="android:windowBackground">@drawable/launcher_screen</item>
    </style>
    
  8. アプリが開いた時に起動するために、「manifests」のマニフェストファイル「AndroidManifest.xml」で「android:theme=”@style/AppTheme.Launcher”」を追加します。
  9. <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.screentransition">
    
        <application
         ・・・
            <activity android:name=".MainActivity"
                android:theme="@style/AppTheme.Launcher">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
         ・・・
            </activity>
        </application>
    
  10. MainActivity.java(ScreenSubを含む)に次のコードを埋め込んで、アプリのメイン画面が開くと、元のテーマに戻すための設定を行います
  11.  
    override fun onCreate(savedInstanceState: Bundle?) {
         try {
             Thread.sleep(5000);  // 5秒間Splash Screenを表示します。
         } catch (InterruptedException e) {
         }
    
         setTheme(R.style.AppTheme)  //元のテーマに戻します
         super.onCreate(savedInstanceState)
       ・・・
    }
    

グローバル変数によるデータ共有

  1. 「java」の「com.example.screentransition」を右クリックし、次のように「New」→「Java Class」を選択し、開いた「New File」でファイル「MyApplication.java」を作成します。
  2. 作成した「MyApplication.java」で次のようにApplicationを継承したクラスを作成します。
  3. package com.example.screentransition;
    import android.app.Application;
    
    public class MyApplication extends Application {
    
        private String mGlobalVarValue ="Tomosoft init";
    
        public String getGlobalVarValue() {
            return mGlobalVarValue;
        }
    
        public void setGlobalVarValue(String str) {
            mGlobalVarValue = str;
        }
    
    }
    
  4. 「manifests」のマニフェストファイル「AndroidManifest.xml」に「android:name=”MyApplication”」を追加します。
  5. <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.screentransition">
    
        <application
         ・・・
            android:theme="@style/AppTheme"
            android:name="MyApplication">
            <activity android:name=".ScreenSub"></activity>
            <activity android:name=".MainActivity"
         ・・・
            </activity>
        </application>
    
  6. MainActivity.java(ScreenSubを含む)でグローバル変数を取得します。そして実際にアクティビティ内で参照するには、getApplication()で変数を取得します。
  7. MyApplication mApp;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
       ・・・
         mApp = (MyApplication) this.getApplicationContext();
         String globalVarValue = mApp.getGlobalVarValue();
    
         String message = String.format("MainActivity onCreate (%s)", globalVarValue);
         Log.println(Log.DEBUG, "Mylog", message);
         mApp.setGlobalVarValue("Tomosoft MainActivity set");
    }
    

Androidアプリの実行

作成したAndroidアプリをコンパイルして実行すると、起動時に次の画面が5秒間表示されます。

オプションメニューを使って「Screen-Main」「Screen-Sub」を切り替えると、Activityにグローバル変数で渡された文字列が、次のようにログされます。

2020-09-02 04:06:18.395 6373-6373/com.example.screentransition D/Mylog: MainActivity onCreate (Tomosoft init)
2020-09-02 04:06:22.697 6373-6373/com.example.screentransition D/Mylog: ScreenSub onCreate (Tomosoft MainActivity set)
2020-09-02 04:06:30.938 6373-6373/com.example.screentransition D/Mylog: MainActivity onCreate (Tomosoft ScreenSub set)
2020-09-02 04:06:34.881 6373-6373/com.example.screentransition D/Mylog: ScreenSub onCreate (Tomosoft MainActivity set)