Surface Duo 用のフラッター MediaQuery

重要

この記事では、パブリック プレビュー段階であり、一般公開前に大幅に変更される可能性がある機能とガイダンスについて説明します。 本書に記載された情報について、Microsoft は明示または黙示を問わずいかなる保証をするものでもありません。

アプリケーションが Surface Duo の両方の画面にまたがると、キャンバスには画面とそれらの間のヒンジ領域の両方が含まれます。 ヒンジは ディスプレイの飾りであり 、MediaQuery を使用して画面上のどこにあるかを知ることができます。 MediaQuery には、ハードウェア機能によって妨げられるすべての領域を一覧表示する、という displayFeatures プロパティがあります。

int featuresCount = MediaQuery.of(context).displayFeatures.length;

ヒンジ拡張方法

Surface Duo のヒンジを簡単に操作できるように、拡張メソッド MediaQueryDataを追加することをお勧めします。 これにより、直接操作できます MediaQuery.of(context).hinge。 デバイスにヒンジが存在しない場合、値は null になります。

/// Extension method that helps with working with the hinge directly. 
extension MediaQueryHinge on MediaQueryData { 
  DisplayFeature? get hinge { 
    for (final DisplayFeature e in displayFeatures) { 
      if (e.type == DisplayFeatureType.hinge) 
        return e; 
    } 
    return null; 
  } 
}

ヒンジが存在するかどうかを確認すると、次のようになります。

bool hasHinge = MediaQuery.of(context).hinge != null;

表示機能

表示機能は、機能しない、または妨げられる可能性があるディスプレイの領域です。 それらのクラス構造は次のとおりです。

class DisplayFeature {
    final Rect bounds;
    final DisplayFeatureType type;
    final DisplayFeatureState state;
}

DisplayFeature の特性:

  • bounds - Rect この表示機能が占有するビューの領域
  • type - 表示機能の種類の列挙型:
    • hinge - デバイスの 2 つのディスプレイ間の物理的な区切り記号。 Surface Duo には表示機能があります hingeDisplay Feature Type: Hinge
    • fold - 幅が 0 の hinge 値として表示します。 フレキシブル ディスプレイに折り目がある場所を識別します。 Display Feature Type: Fold
    • cutout - ディスプレイの端に位置し、通常はカメラシステムを収容します。 Display Feature Type: Cutout
  • state - 表示機能の姿勢の列挙型。折り畳みおよびヒンジにのみ設定されます。 カットアウトの場合、これは unknown. これは、Androidのポスチャ定義に密接に従います。
    • halfOpened - 折りたたみ式デバイスのヒンジは、開いた状態と閉じた状態の間の中間位置にあり、フレキシブルスクリーンの部分間または物理的なスクリーンパネルの間に非平坦な角度があります。
    • flat - 折りたたみ式デバイスが完全に開き、ユーザーに表示される画面領域はフラットです。
    • unknown - ポスチャは不明です。これは新規でサポートされていないためか、機能の cutout 場合は設定されません。

上位レベルのコンポーネント

プロジェクトがそれらに適している場合は、より高いレベルのコンポーネントを操作することをお勧めします。 TwoPane は、アプリケーションがスパンされたときに各画面を簡単に設定できるウィジェットです。 また、Tablet PC、デスクトップ、大画面レイアウトにも役立ちます。

ダイアログとポップアップ メニューでは、表示機能が考慮され、重ならないようにします。 ダイアログの配置とポップアップの動作をより適切に制御するには、 ヒンジ対応のポップアップ ルートに関する 記事を参照してください。