ウィンドウ管理

このページでは、Chrome OS のウィンドウ マネージャーについて説明します。

Chrome OS のウィンドウ マネージャー

Android アプリは以下のカテゴリに分類されます。

API レベル ウィンドウ マネージャーの動作
Android 1.5(API レベル 3)以前 アプリは常に全画面表示されます。
Android 1.6(API レベル 6)から Android 6.0(API レベル 23) アプリのサイズ変更は安全でないものとして扱われます。アプリは、可能な限りデフォルトでスマートフォン サイズの縦向きウィンドウで起動されます。それ以外の場合は、スマートフォン サイズの横向きウィンドウで起動されます。 F4 キーを押すことで、全画面モードを開始または終了できます。その際には、アプリが完全に再起動(強制終了後、新たに起動)され、縦向き(または回転して横向き)サイズの全画面表示になります。
Android 7.0(API レベル 24)サイズ変更可 Android 7.0 のデフォルトです。アプリは再起動せずにサイズ変更できます。 デフォルトでは、通常アプリは最大化された状態で起動されます。M60 以前のバージョンの Chromebook では、デフォルトでスマートフォン(Nexus 5X)サイズの縦向きウィンドウが起動されます。
Android 7.0(API レベル 24)サイズ変更不可 アプリは、android:resizeableActivity="false" を指定することにより、サイズ変更を回避します。ただし、状況によってはサイズ変更が必要になります。たとえば、ユーザーが画面サイズを変更したとき、アクティビティがサイズ変更可能なアクティビティ上にあるとき、アクティビティの向きが変更されたときなどです。
Android 7.0(API レベル 24)アプリ制御 アプリで特別な起動サイズをリクエストします。

なお、アプリの状態(最大化や表示範囲など)は保存されます。

ルート アクティビティ ルール

Chromebook のウィンドウは、アクティビティ ウィンドウのスタックで構成されています。スタック内の各ウィンドウのサイズと向きはすべて同じになります。

デスクトップ環境のユーザーを混乱させる突然の向きやサイズの変更を避けるため、サイド バイ サイド モードを使用する場合、Chromebook のウィンドウ マネージャーは Android のウィンドウ マネージャーと同じように機能します。

  • スタックの最下位のアクティビティによって、その上にあるすべてのアクティビティの属性が決まります。これにより、新たに開始された縦向きでサイズ変更不可のアクティビティが、横向きでサイズ変更可に変わるという、想定外の状況が生じる可能性があります。

ここでデバイスモードの効果が現れます。タブレット モードでは向きがロックされず、通常の Android のように画面の向きがアクティビティの向きを決定づけます。ただし、アクティビティのターゲットが Android 6.0(API レベル 23)以前の場合、アプリのサイズはロックされます。

向き

画面の向きは、スマートフォンの通常の持ち方に合わせて縦向きが一般的です。 しかし、このモードはスマートフォンには適していますが、ノートパソコンには不向きです。 ノートパソコンやタブレットには、横向き画面が適しています。 ウィンドウ マネージャーを使用するアプリで最適な結果を得るには、両方の画面の向きをサポートするよう検討してください。

一部の Android アプリでは、デバイスを縦向きにした場合の回転値は常に Surface.ROTATION_0 になります。たしかに、ほとんどの Android デバイスではそのとおりです。ただし、特定の ARC モードのアプリでは、縦向きの回転値が Surface.ROTATION_0 にならない場合があります。

加速度計や同様のセンサーを読み取りながら正しい回転値を取得するには、Display.getRotation() メソッドを使用し、それに応じて軸を入れ替えます。

1 つの向きのみをサポートする場合は、そのことがアプリ起動前にウィンドウ マネージャーに認識されるよう、マニフェストに情報を追加します。 向きを指定する場合は、可能な限りセンサーの向きを指定します。これは、コンバーチブルであることが多い Chromebook で、上下逆に表示されるのを避けるためです。 選択した向きは維持してください。マニフェストで 1 つの向きを指定したら、後からプログラムで別の向きを設定しないことが非常に重要です。 また、ウィンドウ サイズに基づいて画面の向きを変更すると、小さな縦向きサイズのウィンドウに固定され、ユーザーが大きな横向きのウィンドウに戻せなくなる可能性があります。

起動サイズ

アプリの起動サイズは、次のいずれかの方法で変更できます。

  • 起動サイズをデスクトップ環境のみに使用します。 これにより、ウィンドウ マネージャーから適切な表示範囲と向きが示されます。デスクトップ モード用のカスタマイズ設定を指定するには、<activity> 内に次のメタタグを追加します。

    <meta-data android:name="WindowManagerPreference:FreeformWindowSize"
                   android:value="[phone|tablet|maximize]" />
        <meta-data android:name="WindowManagerPreference:FreeformWindowOrientation"
                   android:value="[portrait|landscape]" />
        
  • 静的な起動サイズを使用します。アクティビティのマニフェスト エントリ内で <layout> を使用して、「固定」の起動サイズを指定します。以下に例を示します。

    <layout android:defaultHeight="500dp"
                android:defaultWidth="600dp"
                android:gravity="top|end"
                android:minHeight="450dp"
                android:minWidth="300dp" />
        
  • 動的な起動サイズを使用します。新しいアクティビティの作成時に、ActivityOptions.setLaunchBounds(Rect) を作成して使用します。空の四角形を指定することで、アプリを最大化できます。

全画面

これは、もともとの Android と同様の動作です。ウィンドウが全画面表示ではない場合は、フル スクリーニング(すべてのシステム UI を非表示にする)リクエストは無視されます。アプリを最大化する際には、全画面モードにするための通常のメソッド、レイアウト、関数が適用されます。 これにより、システム UI(ウィンドウ コントロール バーとシェルフ)が非表示になります。