ウィンドウ管理

このページでは、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() メソッドを使用し、それに応じて軸を入れ替えます。向きの設定に関するさらなる情報については、AccelerometerPlay サンプルアプリをダウンロードしてください。

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

起動サイズ

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

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

    <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(ウィンドウ コントロール バーとシェルフ)が非表示になります。