Skip to content

Most visited

Recently visited

navigation

マルチ ウィンドウのサポート

Android N には、複数のアプリを同時に表示するためのサポートが追加されています。 ハンドヘルド端末で、分割画面モードにして、2 つのアプリを並べて実行したり、重ねて表示したりできます。 TV 端末で、アプリがピクチャ イン ピクチャ モードで動画を再生しているときに、ユーザーは別のアプリを操作できます。

N Preview SDK でアプリをビルドする場合、アプリがマルチ ウィンドウ ディスプレイを処理をする方法を設定できます。 たとえば、アクティビティの最小許容ディメンションを指定できます。 また、アプリに対してマルチ ウィンドウ ディスプレイを無効にし、アプリを全画面モードのみで表示することもできます。

概要

Android N では、複数のアプリが画面を同時に共有できます。たとえば、ユーザーは画面を分割し、ウェブページを左側の画面に表示しながら、右側の画面でメールを作成することができます。 ユーザー エクスペリエンスは端末によって異なります。

図 1. 分割画面モードで並べて実行されている 2 つのアプリ。

ユーザーは、次の方法でマルチ ウィンドウ モードに切り替えることができます。

ユーザーは、複数のアクティビティが画面を共有しているときに、データを 1 つのアクティビティから別のアクティビティにドラッグ&ドロップできます (以前は、単一のアクティビティ内でのみデータをドラッグ&ドロップできました)。

マルチ ウィンドウ ライフサイクル

マルチ ウィンドウ モードは、アクティビティのライフサイクルを変更しません。

マルチ ウィンドウ モードでは、ユーザーが直前に操作したアクティビティのみが任意の時点でアクティブになります。 このアクティビティは、トップ レベルにあると見なされます。 他のすべてのアクティビティは、表示されていても一時停止状態になっています。 ただし、一時停止状態ではあるが、表示されているこれらのアクティビティには、表示されていないアクティビティよりも高い優先度が付与されます。 ユーザーが一時停止状態のアクティビティのいずれかを操作した場合、そのアクティビティが再開され、前のトップ レベルのアクティビティが一時停止します。

注:マルチ ウィンドウ モードでは、アプリが一時停止状態になっても、そのアプリを表示したままにすることができます。 アプリは、一時停止していても、アクティビティを続行する必用がある場合があります。 たとえば、一時停止モードになっているが、表示されている動画再生アプリは、動画の表示を継続する必要があります。 そのため、動画を再生するアクティビティが onPause() ハンドラで動画を一時停止しないようにすることをお勧めします。 その代わり、これらのアクティビティは onStop() で動画を一時停止し、onStart() で動画の再生を再開する必要があります。

実行時の変更の処理で指定したように、ユーザーがアプリをマルチ ウィンドウ モードにすると、アクティビティに構成の変更が通知されます。 これは、ユーザーがアプリのサイズを変更するか、アプリを全画面モードに戻した場合にも行われます。 基本的に、この構成の変更は、端末が縦表示から横表示に切り替えられたことをアプリに通知する場合と同じ影響(端末のディメンションが変更された場合を除いて)をアクティビティのライフサイクルに及ぼします。 実行時の変更の処理で説明したように、アクティビティは構成の変更を処理することができます。または、システムによってアクティビティを破棄し、新しいディメンションでアクティビティを再作成することもできます。

ユーザーがウィンドウのサイズを変更して、高さや幅を拡大した場合、ユーザー操作に一致するようにアクティビティのサイズが変更され、必要に応じて、実行時の変更が発行されます。 アプリで新しく表示された領域を描画するまでに時間がかかる場合、windowBackground 属性またはデフォルトの windowBackgroundFallback システム属性によって指定された色でこれらの領域が一時的に塗りつぶされます。

マルチ ウィンドウ モード向けアプリを構成する

アプリが Android N をターゲットにしている場合は、アプリのアクティビティがマルチ ウィンドウ ディスプレイをサポートする方法や、このサポートを行うかどうかを決めることができます。 サイズとレイアウトを制御するための属性をマニフェストに設定できます。 ルート アクティビティ属性の設定は、タスクスタック内のすべてのアクティビティに適用されます。 たとえば、ルート アクティビティにより android:resizeableActivity が true に設定されると、タスク スタック内のすべてのアクティビティのサイズを変更できるようになります。

注:Android N より前の SDK バージョンでマルチ オリエンテーション アプリをビルドして、そのアプリをマルチ ウィンドウ モードで使用する場合は、アプリのサイズが強制的に変更されます。 アプリに予想外の動作が発生する場合があることをユーザーに警告するダイアログ ボックスが表示されます。 システムは、画面の向きが固定されたアプリのサイズを変更しません。ユーザーがマルチ ウィンドウ モードで画面の向きが固定されたアプリを開こうとすると、そのアプリが全画面で表示されます。

android:resizeableActivity

マルチ ウィンドウ ディスプレイを有効または無効にするには、この属性をマニフェストの <activity> ノードまたは <application> ノードに設定します。

android:resizeableActivity=["true" | "false"]

この属性が true に設定されている場合、アクティビティを分割画面モードまたはフリーフォーム モードで起動できます。 この属性が false に設定されている場合、アクティビティはマルチ ウィンドウ モードをサポートしません。 この値が false のとき、ユーザーがアクティビティをマルチ ウィンドウ モードで起動しようとすると、アクティビティが全画面で表示されます。

アプリが Android N をターゲットにしているが、この属性の値が指定されていない場合、属性の値がデフォルトの true になります。

android:supportsPictureInPicture

この属性をマニフェストの <activity> ノードに設定すると、アクティビティがピクチャ イン ピクチャ ディスプレイをサポートするかどうかを示すことができます。 android:resizeableActivity が false の場合、この属性は無視されます。

android:supportsPictureInPicture=["true" | "false"]

レイアウト属性

Android N では、<layout> マニフェスト要素により、マルチ ウィンドウ モードでのアクティビティの動作に影響を及ぼすいくつかの属性がサポートされています。

android:defaultWidth
フリーフォーム モードで起動されたときのアクティビティのデフォルトの幅です。
android:defaultHeight
フリーフォーム モードで起動されたときのアクティビティのデフォルトの高さです。
android:gravity
フリーフォーム モードで起動されたときのアクティビティの初期配置です。適切な値については、 Gravity のリファレンスをご覧ください。
android:minimalHeightandroid: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 では、マルチ ウィンドウ モードで実行できるアプリをサポートするための新しい機能が導入されています。

マルチ ウィンドウ モードで無効になる機能

端末がマルチ ウィンドウ モードになっている場合、特定の機能は、端末の画面を他のアクティビティやアプリと共有する場合があるアクティビティに対して機能しないため、これらの機能は無効なるか、無視されます。 これらの機能には、次のものが含まれます。

マルチ ウィンドウの変更通知とクエリ

マルチ ウィンドウ ディスプレイをサポートするために、次の新しいメソッドが Activity クラスに追加されています。 各メソッドの詳細については、N Preview SDK リファレンスをご覧ください。

Activity.isInMultiWindowMode()
アクティビティがマルチ ウィンドウ モードで実行されているかどうかを判別するために呼び出します。
Activity.isInPictureInPictureMode()
アクティビティがピクチャ イン ピクチャ モードで実行されているかどうかを判別するために呼び出します。

注:ピクチャ イン ピクチャ モードは、マルチ ウィンドウ モードの特別な形態です。 myActivity.isInPictureInPictureMode() が true を返す場合は、myActivity.isInMultiWindowMode() も true を返します。

Activity.onMultiWindowModeChanged()
アクティビティがマルチ ウィンドウ モードになるか、マルチ ウィンドウ モードではなくなると、常にこのメソッドが呼び出されます。 アクティビティがマルチ ウィンドウ モードになると、このメソッドに true 値が渡され、アクティビティがマルチ ウィンドウ モードではなくなると、このメソッドに false 値が渡されます。
Activity.onPictureInPictureModeChanged()
アクティビティがピクチャ イン ピクチャ モードになるか、ピクチャ イン ピクチャ モードではなくなると、常にこのメソッドが呼び出されます。 アクティビティがピクチャ イン ピクチャ モードになると、このメソッドに true 値が渡され、アクティビティがピクチャ イン ピクチャ モードではなくなると、このメソッドに false 値が渡されます。

また、これらの各メソッドの 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.startDrag() の新しいエイリアスです。異なるアクティビティ間のドラッグ&ドロップを有効にするには、新しいフラグ View.DRAG_FLAG_GLOBAL を渡します。 URI パーミッションを受け取る側のアクティビティに付与する必要がある場合、必要に応じて、新しいフラグ View.DRAG_FLAG_GLOBAL_URI_READ または View.DRAG_FLAG_GLOBAL_URI_WRITE を渡します。
View.cancelDragAndDrop()
実行中のドラッグ操作をキャンセルします。ドラッグ操作を開始したアプリだけが呼び出せます。
View.updateDragShadow()
実行中のドラッグ操作のドラッグ シャドウを置き換えます。ドラッグ操作を開始したアプリだけが呼び出せます。
Activity.requestDropPermissions()
DragEvent に含まれる ClipData で渡されるコンテンツ URI のパーミッションをリクエストします。

アプリのマルチ ウィンドウ サポートをテストする

ユーザーが Android N を実行している端末をマルチ ウィンドウ モードにしてアプリの起動を試みる場合に備えて、Android N 向けにアプリをアップデートするかどうかに関係なく、アプリがマルチ ウィンドウ モードでどのように動作するかを確認する必要があります。

テスト端末の構成

Android N を端末にインストールすると、分割画面モードが自動的にサポートされます。

アプリが N Preview SDK でビルドされていない場合

アプリが N Preview SDK でビルドされていないときに、ユーザーがマルチ ウィンドウ モードでそのアプリを使用しようとすると、アプリが画面の向きの固定を宣言しない限り、アプリのサイズが強制的に変更されます。

アプリが画面の向きの固定を宣言しない場合、Android N を実行している端末でアプリを起動し、アプリを分割画面モードにすることを試みる必要があります。 アプリのサイズが強制的に変更されたときに、ユーザー エクスペリエンスが許容範囲内にあることを確認してください。

アプリが画面の向きの固定を宣言する場合、アプリをマルチ ウィンドウ モードにすることを試みる必要があります。 アプリをマルチ ウィンドウ モードにすることを試みたとき、アプリが全画面モードのままであることを確認してください。

マルチ ウィンドウ モードをサポートする場合

アプリが N Preview SDK でビルドされていて、マルチ ウィンドウ モードが無効になっていない場合、分割画面モードとフリーフォーム モードの両方で次の動作を確認してください。

チェックリストのテスト

アプリのパフォーマンスをマルチ ウィンドウ モードで確認するには、以下の操作を試みてください。 特に記載のない限り、分割画面モードとマルチ ウィンドウ モードの両方でこれらの操作を試みる必要があります。

マルチ ウィンドウのサポートを無効にしている場合

android:resizableActivity="false" を設定して、マルチ ウィンドウのサポートを無効にした場合は、Android N を実行している端末でアプリを起動し、アプリをフリーフォーム モードおよび分割画面モードにすることを試みる必要があります。 アプリをマルチ ウィンドウ モードにすることを試みたとき、アプリが全画面モードのままであることを確認してください。

This site uses cookies to store your preferences for site-specific language and display options.

Hooray!

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a one-minute survey?
Help us improve Android tools and documentation.