Flatter MediaQuery für Surface Duo

Wenn Ihre Anwendung über beide Bildschirme des Surface Duo verteilt ist, enthält Ihre Canvas beide Bildschirme und den Scharnierbereich zwischen ihnen. Das Scharnier ist ein Anzeigeobjekt , und Sie können MediaQuery verwenden, um zu wissen, wo es sich auf dem Bildschirm befindet. MediaQuery verfügt über eine Eigenschaft namens displayFeatures , die alle Bereiche der Anzeige auflistet, die durch Hardwarefeatures blockiert sind.

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

Scharniererweiterungsmethode

Um die Arbeit mit dem Scharnier auf dem Surface Duo zu vereinfachen, wird empfohlen, eine Erweiterungsmethode zu hinzuzufügen MediaQueryData. Dadurch können Sie direkt mit MediaQuery.of(context).hingearbeiten. Wenn auf dem Gerät kein Scharnier vorhanden ist, ist der Wert 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; 
  } 
}

Die Überprüfung, ob das Scharnier vorhanden ist, lautet:

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

Features anzeigen

Anzeigefeatures sind Bereiche des Displays, die nicht funktionsfähig oder blockiert sein können. Die Klassenstruktur für sie lautet:

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

Eigenschaften von DisplayFeature:

  • bounds - Rect Bereich der Ansicht, die von dieser Anzeigefunktion belegt ist
  • type - Enumeration für den Typ der Anzeigefeatures:
    • hinge – Ein physisches Trennzeichen zwischen den beiden Anzeigen des Geräts. Surface Duo verfügt über eine hinge Anzeigefunktion. Anzeigefeaturetyp: Scharnier
    • fold - Zeigen Sie dies als eine hinge Breite von null an. Es identifiziert, wo das flexible Display eine Falten hat. Anzeigefeaturetyp: Falten
    • cutout - Sitzt am Rand des Displays und beherbergt in der Regel Kamerasysteme. Anzeigefeaturetyp: Ausschneiden
  • state - Enumeration für die Haltung des Anzeigefeatures, das nur für Falten und Scharniere aufgefüllt wird. Für Ausschnitte ist unknowndies . Dies folgt eng der Haltungsdefinition von Android.
    • halfOpened - Das Scharnier des faltbaren Geräts befindet sich in einer Zwischenposition zwischen geöffnetem und geschlossenem Zustand, es gibt einen nicht flachen Winkel zwischen Teilen des flexiblen Bildschirms oder zwischen physischen Bildschirmpanels.
    • flat - Das faltbare Gerät ist vollständig geöffnet, der Bildschirmraum, der dem Benutzer angezeigt wird, ist flach.
    • unknown – Die Haltung ist unbekannt, entweder weil sie neu und nicht unterstützt wird, oder im Fall von cutout Features nicht aufgefüllt wird.

Übergeordnete Komponenten

Es wird empfohlen, mit Komponenten auf höherer Ebene zu arbeiten, wenn Ihr Projekt für diese geeignet ist. TwoPane ist ein Widget, das es beim Aufspannen Ihrer Anwendung erleichtert, jeden Bildschirm aufzufüllen. Es hilft folglich auch bei Tablet- und Desktop-Layouts, sowie bei Layouts von größeren Bildschirmen.

Dialogfelder und Popupmenüs berücksichtigen Anzeigefeatures und verhindern deren Überlappung. Um die Platzierung des Dialogfelds und das Popupverhalten besser steuern zu können, lesen Sie den Artikel Hinge-fähige Popuprouten .