Split Screenは画面を分割するモードで、2つのアプリを同時に並べて実行し、利用可能なスペースを分割します。ユーザーはウィンドウ間の分割線をドラッグして比率を変更し、各半分のアプリを素早く切り替えることができます。Android Developers (2025)によると、Split Screenは画面幅600dp以上のすべてのデバイスで必須の互換性プログラムの一部であり、AndroidとiPadOSの両方でサポートされています。
重要なポイント
Split Screenはマルチタスクモードで、画面が2つの機能領域に分割され、それぞれに独立したアプリが表示されます。一方のウィンドウがもう一方の上に浮かぶSlide OverやPiPとは異なり、Split Screenは両方のアプリに同じステータスを与えます。各アプリが画面の半分を受け取ります。
このモードはAndroid(7.0 Nougat以降)、iPadOS(iOS 9以降)、Windows(Snap Assist)、および一部のLinuxデスクトップ環境で利用できます。モバイル開発において、Split Screenはタブレットや折りたたみデバイスで必須のシナリオと見なされており、マルチタスクはプラットフォームの重要な利点です。
ユーザーはOverview(Android)でアプリアイコンを長押しするか、Dock(iPad)からドラッグしてSplit Screenをアクティブ化します。アクティブ化後、画面が分割され、ユーザーは最近使用したアプリのリストまたはDockから2番目のアプリを選択します。
Androidでは、Split ScreenはWindow Managerを介して管理されます。ユーザーがモードをアクティブ化すると、システムは2つのStackViewを作成します。各Activityに1つずつです。ウィンドウ間の分割線はシステムによってレンダリングされ、最小の厚さは1dpですが、ジェスチャーナビゲーション搭載デバイスでは増加する可能性があります。
各アプリはonConfigurationChangedを介してサイズ変更の通知を受け取ります。Activityがこのイベントを処理しない場合、破棄されて再作成されます。ビデオやゲームではこれが重要です。Activityを再作成すると、再生位置やゲームの状態がリセットされます。
ウィンドウの比率は分割線をドラッグして変更できます。Androidは50/50、70/30、30/70の3つの状態をサポートしています。ユーザーはアプリを入れ替えることもでき、configChangesが処理されていない場合はActivityが再起動されます。
Split ViewはiPadOSにおけるSplit Screenの実装です。画面分割が常に中央から始まるAndroidとは異なり、iPadOSはユーザーに50/50、25/75、75/25の3つの分割位置を提供します。モードはDockまたはApp Exposéを介してアクティブ化されます。
iPadOSでは、Split ViewのアプリをSlide Over(フローティングウィンドウ)に折りたたむことができます。これはAppleのユニークな機能で、ユーザーはデータを失うことなく、ウィンドウをSplit ViewからSlide Overに、またはその逆に変換できます。開発者は3つのモードすべてをサポートする必要があります。フルスクリーン、Split View、Slide Overです。
iOSでSplit Viewをサポートするには、アプリはSize Classesとシーン(UIScene)を介してアダプティブレイアウトを実装する必要があります。iOS 13以降、Appleはアプリがマルチウィンドウモードを正しく処理することを要求しています。そうしないと、システムがiPadでActivityを強制的に再起動する可能性があります。
Split Screenへの出入り時に、設定変更が発生します。ウィンドウの幅、高さ、アスペクト比が変わります。標準のAndroidの動作はActivityの再作成です(onDestroy + onCreate)。これを回避するには、マニフェストでandroid:configChangesを指定します。
再作成時に、ActivityはViewとViewModelの状態を失います。UIの状態を保存するにはSavedStateHandleまたはApplicationスコープのViewModelを使用します。複雑なオブジェクトの場合はonRetainNonConfigurationInstance()が代替手段です。
@Override
fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig)
val isSplitScreen = isInMultiWindowMode()
if (isSplitScreen) {
adjustLayoutForSplitScreen()
}
}
iPadOSでは、同等のメカニズムはtraitCollectionDidChangeまたはviewWillTransitionToSizeです。開発者は新しいコンテナサイズを受け取り、Size Classに従ってレイアウトを再構築する必要があります。
Androidでは、Split ScreenのサポートはマニフェストでresizeableActivityフラグを設定することから始まります。その後、Activityは最小幅220dpまで縮小できます。アプリがそのような狭い画面をサポートしない場合は、マニフェストでandroid:minWidthを指定します。
iPadの場合、開発者はSize Classesをサポートし、Auto LayoutまたはSwiftUIを使用するだけで済みます。SwiftUIはSplit Viewへの移行時に自動的にインターフェースを適応させます。たとえば、NavigationSplitViewはスタックモードとサイドバイサイドモードを切り替えます。
実際のデバイスまたはマルチリサイズ可能ウィンドウ設定のエミュレーターでSplit Screenをテストすることをお勧めします。Android EmulatorはADBを介して任意の数のウィンドウを起動し、さまざまな比率でのアプリの動作を確認できます。
| プラットフォーム | 適応メカニズム | 最小幅 |
|---|---|---|
| Android | resizeableActivity + configChanges | 220 dp |
| iPadOS | Size Classes + UIScene | 320 pt(プライマリ) |
最初の間違いは状態保存を無視することです。Split Screenでは、Activityはユーザーの操作なしにいつでも再作成される可能性があります。データがローカル変数にのみ保存されている場合、失われます。画面データにはViewModelを、重要な状態にはSavedStateHandleを使用してください。
2番目の間違いは、ウィンドウが縮小したときにコンテンツを非表示にすることです。一部の開発者は、幅が特定のしきい値を下回ると要素を非表示にします。正しいアプローチはレイアウトを再構築することです。狭い画面では、すべてを非表示にするのではなく、最も重要なものだけを表示します。Window Size Classはこのロジックのための既製のブレークポイントを提供します。
3番目の間違いはonWindowFocusChangedを処理しないことです。Split Screenでは、フォーカスはアプリを閉じずにウィンドウ間で切り替わることがあります。このイベントを無視すると、ユーザーが隣のウィンドウを見ただけでビデオプレーヤーが停止します。
よくある質問
FLAG_ACTIVITY_LAUNCH_ADJACENTを含むIntentを使用します。デバイスがSplit Screenモードの場合、アプリは隣のウィンドウで開きます。デバイスがフルスクリーンモードの場合、フラグは無視されます。
はい。Activityは表示されたままですが、フォーカスを失います。onPauseは呼び出されますが、onStopは呼び出されません。Split Screenを終了すると、onMultiWindowModeChangedが呼び出され、次にonResumeが呼び出されます。
WindowManager.getCurrentWindowMetrics()またはJetpack WindowManagerを使用します。Display.getSize()は使用しないでください。これは現在のアプリウィンドウではなく、全画面を返します。
はい。展開されたデバイスでは、Split Screenがデフォルトモードになることがよくあります。Samsung Galaxy Z Foldは横向きモードで3つのアプリを同時に表示するSplit Screenを提供します。
そのActivityにandroid:resizeableActivity="false"を設定します。API 24+の場合、このフラグはSplit Screenを無効にします。Android 12L+では、android:minWidthとandroid:minHeightを使用します。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。