page.title=マルチ ウィンドウのサポート page.metaDescription=複数のアプリを同時に表示するための Android N の新しいサポート。 page.keywords="multi-window", "android N", "split screen", "free-form" @jd:body
Android N には、複数のアプリを同時に表示するためのサポートが追加されています。 ハンドヘルド端末で、分割画面モードにして、2 つのアプリを並べて実行したり、重ねて表示したりできます。 TV 端末で、アプリがピクチャ イン ピクチャ モードで動画を再生しているときに、ユーザーは別のアプリを操作できます。
N Preview SDK でアプリをビルドする場合、アプリがマルチ ウィンドウ ディスプレイを処理をする方法を設定できます。 たとえば、アクティビティの最小許容ディメンションを指定できます。 また、アプリに対してマルチ ウィンドウ ディスプレイを無効にし、アプリを全画面モードのみで表示することもできます。
Android N では、複数のアプリが画面を同時に共有できます。たとえば、ユーザーは画面を分割し、ウェブページを左側の画面に表示しながら、右側の画面でメールを作成することができます。 ユーザー エクスペリエンスは端末によって異なります。
図 1. 分割画面モードで並べて実行されている 2 つのアプリ。
ユーザーは、次の方法でマルチ ウィンドウ モードに切り替えることができます。
ユーザーは、複数のアクティビティが画面を共有しているときに、データを 1 つのアクティビティから別のアクティビティにドラッグ&ドロップできます (以前は、単一のアクティビティ内でのみデータをドラッグ&ドロップできました)。
マルチ ウィンドウ モードは、アクティビティのライフサイクルを変更しません。
マルチ ウィンドウ モードでは、ユーザーが直前に操作したアクティビティのみが任意の時点でアクティブになります。 このアクティビティは、トップ レベルにあると見なされます。 他のすべてのアクティビティは、表示されていても一時停止状態になっています。 ただし、一時停止状態ではあるが、表示されているこれらのアクティビティには、表示されていないアクティビティよりも高い優先度が付与されます。 ユーザーが一時停止状態のアクティビティのいずれかを操作した場合、そのアクティビティが再開され、前のトップ レベルのアクティビティが一時停止します。
注:マルチ ウィンドウ モードでは、アプリが一時停止状態になっても、そのアプリを表示したままにすることができます。 アプリは、一時停止していても、アクティビティを続行する必用がある場合があります。 たとえば、一時停止モードになっているが、表示されている動画再生アプリは、動画の表示を継続する必要があります。 そのため、動画を再生するアクティビティが {@link android.app.Activity#onPause onPause()} ハンドラで動画を一時停止しないようにすることをお勧めします。 その代わり、これらのアクティビティは {@link android.app.Activity#onStop onStop()} で動画を一時停止し、{@link android.app.Activity#onStart onStart()} で動画の再生を再開する必要があります。
実行時の変更の処理で指定したように、ユーザーがアプリをマルチ ウィンドウ モードにすると、アクティビティに構成の変更が通知されます。 これは、ユーザーがアプリのサイズを変更するか、アプリを全画面モードに戻した場合にも行われます。 基本的に、この構成の変更は、端末が縦表示から横表示に切り替えられたことをアプリに通知する場合と同じ影響(端末のディメンションが変更された場合を除いて)をアクティビティのライフサイクルに及ぼします。 実行時の変更の処理で説明したように、アクティビティは構成の変更を処理することができます。または、システムによってアクティビティを破棄し、新しいディメンションでアクティビティを再作成することもできます。
ユーザーがウィンドウのサイズを変更して、高さや幅を拡大した場合、ユーザー操作に一致するようにアクティビティのサイズが変更され、必要に応じて、実行時の変更が発行されます。
アプリで新しく表示された領域を描画するまでに時間がかかる場合、{@link
android.R.attr#windowBackground windowBackground} 属性またはデフォルトの
windowBackgroundFallback
システム属性によって指定された色でこれらの領域が一時的に塗りつぶされます。
アプリが Android N をターゲットにしている場合は、アプリのアクティビティがマルチ ウィンドウ ディスプレイをサポートする方法や、このサポートを行うかどうかを決めることができます。
サイズとレイアウトを制御するための属性をマニフェストに設定できます。
ルート アクティビティ属性の設定は、タスクスタック内のすべてのアクティビティに適用されます。
たとえば、ルート アクティビティにより
android:resizeableActivity
が true に設定されると、タスク スタック内のすべてのアクティビティのサイズを変更できるようになります。
注:Android N より前の SDK バージョンでマルチ オリエンテーション アプリをビルドして、そのアプリをマルチ ウィンドウ モードで使用する場合は、アプリのサイズが強制的に変更されます。 アプリに予想外の動作が発生する場合があることをユーザーに警告するダイアログ ボックスが表示されます。 システムは、画面の向きが固定されたアプリのサイズを変更しません。ユーザーがマルチ ウィンドウ モードで画面の向きが固定されたアプリを開こうとすると、そのアプリが全画面で表示されます。
マルチ ウィンドウ ディスプレイを有効または無効にするには、この属性をマニフェストの <activity>
ノードまたは
<application>
ノードに設定します。
android:resizeableActivity=["true" | "false"]
この属性が true に設定されている場合、アクティビティを分割画面モードまたはフリーフォーム モードで起動できます。 この属性が false に設定されている場合、アクティビティはマルチ ウィンドウ モードをサポートしません。 この値が false のとき、ユーザーがアクティビティをマルチ ウィンドウ モードで起動しようとすると、アクティビティが全画面で表示されます。
アプリが Android N をターゲットにしているが、この属性の値が指定されていない場合、属性の値がデフォルトの true になります。
この属性をマニフェストの <activity>
ノードに設定すると、アクティビティがピクチャ イン ピクチャ ディスプレイをサポートするかどうかを示すことができます。
android:resizeableActivity
が false の場合、この属性は無視されます。
android:supportsPictureInPicture=["true" | "false"]
Android N では、<layout>
マニフェスト要素により、マルチ ウィンドウ モードでのアクティビティの動作に影響を及ぼすいくつかの属性がサポートされています。
android:defaultWidth
android:defaultHeight
android:gravity
android:minimalHeight
、android:minimalWidth
たとえば、次のコードは、アクティビティがフリーフォーム モードで表示されているときに、アクティビティのデフォルトのサイズと位置、およびその最小サイズを指定する方法を示しています。
<activity android:name=".MyActivity"> <layout android:defaultHeight="500dp" android:defaultWidth="600dp" android:gravity="top|end" android:minimalHeight="450dp" android:minimalWidth="300dp" /> </activity>
Android N では、マルチ ウィンドウ モードで実行できるアプリをサポートするための新しい機能が導入されています。
端末がマルチ ウィンドウ モードになっている場合、特定の機能は、端末の画面を他のアクティビティやアプリと共有する場合があるアクティビティに対して機能しないため、これらの機能は無効なるか、無視されます。 これらの機能には、次のものが含まれます。
android:screenOrientation
属性に加えられた変更を無視します。
マルチ ウィンドウ ディスプレイをサポートするために、次の新しいメソッドが {@link android.app.Activity} クラスに追加されています。 各メソッドの詳細については、N Preview SDK リファレンスをご覧ください。
Activity.isInMultiWindowMode()
Activity.isInPictureInPictureMode()
注:ピクチャ イン ピクチャ モードは、マルチ ウィンドウ モードの特別な形態です。
myActivity.isInPictureInPictureMode()
が true を返す場合は、myActivity.isInMultiWindowMode()
も true を返します。
Activity.onMultiWindowModeChanged()
Activity.onPictureInPictureModeChanged()
また、これらの各メソッドの {@link android.app.Fragment} バージョンがあります。たとえば、Fragment.isInMultiWindowMode()
です。
アクティビティをピクチャ イン ピクチャ モードにするには、新しいメソッド
Activity.enterPictureInPictureMode()
を呼び出します。端末がピクチャ イン ピクチャ モードをサポートしない場合、このメソッドの効果はありません。
詳細については、ピクチャ イン ピクチャに関するドキュメントをご覧ください。
新しいアクティビティを起動するときに、可能であれば、新しいアクティビティを現在のアクティビティの隣に表示する必用があるかどうかをシステムに示すことができます。
そうするには、フラグ
Intent.FLAG_ACTIVITY_LAUNCH_TO_ADJACENT
を使用します。
このフラグを渡すと、次の動作がリクエストされます。
端末がフリーフォーム モードになっている場合、新しいアクティビティを起動するときに、
ActivityOptions.setLaunchBounds()
を呼び出すことにより、新しいアクティビティのディメンションと画面上での位置を指定することができます。
端末がマルチ ウィンドウ モードではない場合、このメソッドの効果はありません。
注:タスクスタック内でアクティビティを起動すると、画面上のアクティビティが起動したアクティビティに置き換えられ、すべてのマルチ ウィンドウ プロパティが継承されます。 マルチ ウィンドウ モードで新しいアクティビティを別個の画面として起動する場合は、新しいアクティビティを新しいタスクスタックで起動する必要があります。
ユーザーは、2 つのアクティビティが画面を共有しているときに、データを 1 つのアクティビティから別のアクティビティにドラッグ&ドロップできます (以前は、単一のアクティビティ内でのみデータをドラッグ&ドロップできました)。 そのため、アプリがドラッグ&ドロップをサポートしていない場合は、ドラッグ&ドロップ機能をアプリに追加する必要があります。
N Preview SDK では、異なるアプリ間のドラッグ&ドロップをサポートするために、android.view
パッケージが拡張されています。
次のクラスとメソッドの詳細については、N Preview SDK リファレンスをご覧ください。
android.view.DropPermissions
View.startDragAndDrop()
View.DRAG_FLAG_GLOBAL
を渡します。
URI パーミッションを受け取る側のアクティビティに付与する必要がある場合、必要に応じて、新しいフラグ
View.DRAG_FLAG_GLOBAL_URI_READ
または
View.DRAG_FLAG_GLOBAL_URI_WRITE
を渡します。
View.cancelDragAndDrop()
View.updateDragShadow()
Activity.requestDropPermissions()
ユーザーが Android N を実行している端末をマルチ ウィンドウ モードにしてアプリの起動を試みる場合に備えて、Android N 向けにアプリをアップデートするかどうかに関係なく、アプリがマルチ ウィンドウ モードでどのように動作するかを確認する必要があります。
Android N を端末にインストールすると、分割画面モードが自動的にサポートされます。
アプリが N Preview SDK でビルドされていないときに、ユーザーがマルチ ウィンドウ モードでそのアプリを使用しようとすると、アプリが画面の向きの固定を宣言しない限り、アプリのサイズが強制的に変更されます。
アプリが画面の向きの固定を宣言しない場合、Android N を実行している端末でアプリを起動し、アプリを分割画面モードにすることを試みる必要があります。 アプリのサイズが強制的に変更されたときに、ユーザー エクスペリエンスが許容範囲内にあることを確認してください。
アプリが画面の向きの固定を宣言する場合、アプリをマルチ ウィンドウ モードにすることを試みる必要があります。 アプリをマルチ ウィンドウ モードにすることを試みたとき、アプリが全画面モードのままであることを確認してください。
アプリが N Preview SDK でビルドされていて、マルチ ウィンドウ モードが無効になっていない場合、分割画面モードとフリーフォーム モードの両方で次の動作を確認してください。
アプリのパフォーマンスをマルチ ウィンドウ モードで確認するには、以下の操作を試みてください。 特に記載のない限り、分割画面モードとマルチ ウィンドウ モードの両方でこれらの操作を試みる必要があります。
android:resizableActivity="false"
を設定して、マルチ ウィンドウのサポートを無効にした場合は、Android N を実行している端末でアプリを起動し、アプリをフリーフォーム モードおよび分割画面モードにすることを試みる必要があります。
アプリをマルチ ウィンドウ モードにすることを試みたとき、アプリが全画面モードのままであることを確認してください。