「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)



