「Activityの切り替えとオプションメニューを持つAndroidアプリ作成」で作成したアプリををベースに、次の機能を持つAndroidアプリをAndroid Studioを使ってJava言語で作成し、Android Emulatorで実行します。
- 起動時のSplash Screen
- グローバル変数によるデータ共有
起動時のSplash Screenの作成
Android アプリの起動に表示するSplash Screenを作成します。
- Sprash Screenに表示させるロゴ画像を「drawable」フォルダに格納します。「drawable」フォルダの位置は次のように「\AndroidStudioProjects\ScreenTransition\app\src\main\res\drawable」になっています。
- 次のように「res」→「drawable」フォルダ上で右クリックし、「New」→「file」をクリックし、開いた「New File」でファイル名「launcher_screen.xml」を作成します。
- 「res」→「values」のxmlファイル「colors.xml」に「
#00000000 」を作成します。 - 「res」→「drawable」のSprash Screen用のxmlファイル「launcher_screen.xml」に次のコードを作成します。
- Sprash Screen用のテーマを「res」→「values」の「styles.xml」に設定します。
- アプリが開いた時に起動するために、「manifests」のマニフェストファイル「AndroidManifest.xml」で「android:theme=”@style/AppTheme.Launcher”」を追加します。
- MainActivity.java(ScreenSubを含む)に次のコードを埋め込んで、アプリのメイン画面が開くと、元のテーマに戻すための設定を行います
<?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>
<style name="AppTheme.Launcher" parent="AppTheme"> <item name="android:windowBackground">@drawable/launcher_screen</item> </style>
<?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>
override fun onCreate(savedInstanceState: Bundle?) { try { Thread.sleep(5000); // 5秒間Splash Screenを表示します。 } catch (InterruptedException e) { } setTheme(R.style.AppTheme) //元のテーマに戻します super.onCreate(savedInstanceState) ・・・ }
グローバル変数によるデータ共有
- 「java」の「com.example.screentransition」を右クリックし、次のように「New」→「Java Class」を選択し、開いた「New File」でファイル「MyApplication.java」を作成します。
- 作成した「MyApplication.java」で次のようにApplicationを継承したクラスを作成します。
- 「manifests」のマニフェストファイル「AndroidManifest.xml」に「android:name=”MyApplication”」を追加します。
- MainActivity.java(ScreenSubを含む)でグローバル変数を取得します。そして実際にアクティビティ内で参照するには、getApplication()で変数を取得します。
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; } }
<?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>
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)