Android 7.0(Nougat)で追加されたマルチウィンドウについて学習します。最新OSではマルチウィンドウ機能をOS上でサポートしているため、マルチウィンドウに対応する・しないどちらにせよ、アプリを正しく動作させるためにどういう対処が必要か知っておく必要があります。
まず手を動かして手法を掴みたい方は下記「実習」から、先にマルチウィンドウについて詳しく知りたい方は次ページの「講義」から読み進めてみてください。
実習 マルチウィンドウの画面分割を体験する
1 サンプルプロジェクトをインポートする
サンプルプロジェクト「Chapter09/Lesson37/before」をインポートします。[Welcome to Android Studio]画面から[Import project (Eclipse ADT, Gradle,etc.)]を選択します(図1(1))。[ファイル選択]ダイアログが表示されるので、インポートしたいプロジェクトのフォルダ(Lesson37/before)を選択して(2)、[OK]ボタンをクリックします(3)。読み込みが完了するとプロジェクトを開いた状態になるので、[Android]から[Project]に変更しておきます(4)。
2 MainActivityのレイアウトを編集する
app/src/main/res/layout/activity_main.xmlを開いて、リスト1のように編集してください。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="16dp" tools:context="com.kayosystem.honki.chapter09.lesson37.MainActivity"> <Button android:id="@+id/launch_activity" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="16dp" android:text="@string/launch_second_activity" /> <Button android:id="@+id/launch_activity_new_window" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="16dp" android:text="@string/launch_second_activity_new_window" /> <fragment xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/loglist_fragment" android:name="com.kayosystem.honki.chapter09.lesson37.LogListFragment" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginTop="16dp" android:background="@android:color/white" /> </LinearLayout>
3 アプリ内で使用する文字列を編集する
app/src/main/res/values/strings.xmlを開いて、リスト2のように編集してください。
<resources> <string name="app_name">Lesson37</string> <string name="name_second_activity">これはSecondActivityです</string> <string name="launch_second_activity">SecondActivityを起動</string> <string name="launch_second_activity_new_window">SecondActivityを別ウィンドウで起動</string> </resources>
4 MainActivityのJavaプログラムを編集する
app/src/main/java/(Company Domain名)/MainActivity.javaを開いて、リスト3のように編集してください。
(省略) import android.content.res.Configuration; import android.util.Log; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); findViewById(R.id.launch_activity).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(MainActivity.this, SecondActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); } }); findViewById(R.id.launch_activity_new_window).setOnClickListener(newView.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(MainActivity.this, SecondActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT | Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent); } }); } (省略)
5 SecondActivityを追加する
app/src/main/java/(Company Domain名)/MainActivity.javaを右クリックし(図2(1))、メニューから[New](2)→[Activity](3)→[Empty Activity]を選択します(4)。[Configure Activity]画面が表示されるので「ActivityName」を「SecondActivity」に変更し(5)、[Generate LayoutFile]のチェックを外して(6)、[Finish]ボタンをクリックします(7)*。
*SecondActivityのレイアウトファイルは事前に準備しています。
6 SecondActivityのJavaプログラムを編集する
app/src/main/java/(Company Domain名)/SecondActivity.javaを開いて、リスト4のように編集してください。
(省略) public class SecondActivity extends LogActivity { @Override public int getActivityLayoutId() { return R.layout.activity_second; } }
7 AndroidManifest.xmlを編集する
app/src/main/AndroidManifest.xmlファイルを開いて、リスト5のように編集してください。
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.kayosystem.honki.chapter09.lesson37"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name="com.kayosystem.honki.chapter09.lesson37.MainActivity" android:label="@string/app_name"> <intent-fi lter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-fi lter> </activity> <activity android:name=".SecondActivity" /> </application> </manifest>
8 アプリを実行する
アプリを実行すると図3のようなメイン画面が表示されます。オーバービューボタンを長押しすると画面が分割するので(1)、[SECONDACTIVITYを別ウィンドウで起動]ボタンをクリックすると(2)、SecondActivityが画面下半分に表示されます(3)。メイン画面とSecondActivityには、それぞれのライフサイクルが表示され、画面をクリックするとアクティブになるのでライフサイクルの変化を確認してください。