Fensterverwaltung

ChromeOS unterstützt Android-Apps in mehreren Fenstern. Das System rendert Apps in Fenstercontainer verwandelt, deren Größe durch den Formfaktor des wie in Abbildung 1 dargestellt.

Abbildung 1: Ein App-Fenster auf verschiedenen Geräten

Es ist wichtig, Layouts zu entwerfen, die mit verschiedenen Bildschirmgrößen funktionieren. Wenn Sie Beachten Sie die Android-Richtlinien, um unterschiedliche Bildschirmgrößen erzielen, funktioniert Ihre App auch gut wenn sie unter ChromeOS ausgeführt werden.

Auf dieser Seite erfährst du, wie du dafür sorgst, dass das App-Fenster richtig geöffnet wird und die Größe des App-Fensters angepasst wird. und der gesamte Inhalt wird angezeigt, wenn sich die Größe ändert.

Größe der anfänglichen Markteinführung

Apps können ihre anfängliche Größe für die Markteinführung auf folgende Arten anfordern:

  • Verwenden Sie eine Startgröße nur in Desktopumgebungen. Dies hilft dem Fenstermanager, Ihnen die richtigen Grenzen Ausrichtung. Wenn Sie im Desktopmodus Einstellungen festlegen möchten, fügen Sie die folgenden Meta-Tags im <activity>:
<meta-data android:name="WindowManagerPreference:FreeformWindowSize"
           android:value="[phone|tablet|maximize]" />
<meta-data android:name="WindowManagerPreference:FreeformWindowOrientation"
           android:value="[portrait|landscape]" />
  • Verwenden Sie statische Startgrenzen. Verwenden Sie <layout> im Manifesteintrag Ihres um eine „feste“ Ausgangsgröße, wie im folgenden Beispiel:
<layout android:defaultHeight="500dp"
            android:defaultWidth="600dp"
            android:gravity="top|end"
            android:minHeight="450dp"
            android:minWidth="300dp" />
  • Verwenden Sie dynamische Startgrenzen. Eine Aktivität kann ActivityOptions.setLaunchBounds(Rect), wenn Sie eine neue Aktivität erstellen. Von ein leeres Rechteck angeben, lässt sich Ihre App maximieren.

Fenstergröße anpassen

In ChromeOS können Nutzer die Größe des App-Fensters wie gewohnt durch Ziehen wie in Abbildung 2 dargestellt.

Abbildung 2: Ein App-Fenster mit anpassbarer Größe

Es gibt zwei Optionen für die Größenanpassung des Fensters bei Verwendung der Klasse View:

  • Auf Konfigurationsänderungen dynamisch reagieren, indem Sie onConfigurationChanged(..) Sie können beispielsweise android:configChanges="screenSize|smallestScreenSize|orientation|screenLayout" zum Manifest der Aktivität hinzu. Weitere Informationen zum Umgang mit Konfigurationsänderungen finden Sie unter Konfigurationsänderungen verarbeiten
  • Lassen Sie das System die Aktivität neu starten. Implementieren Sie in diesem Fall onSaveInstanceState und verwenden die ViewModel-Architektur Komponente, um das vorherige gespeichert ist.

Wenn Sie Jetpack Compose verwenden, hängt das Größenänderungsverhalten von wie Ihre Aktivitäten konfiguriert sind. Werden Änderungen dynamisch verarbeitet, Neuzusammensetzung wird ausgelöst, wenn sich die Fenstergröße ändert. Wenn die Aktivität vom System neu gestartet, erfolgt nach dem Neustart eine anfängliche Zusammensetzung. Beides „Compose“-Layouts erstellen, die sich an wechselnde Fenster Größen. Gehen Sie nicht von festen Größen aus.

Fensterabmessungen

Lassen Sie Ihre Aktivitäten bei jedem Start die Fensterdimensionen lesen und und ordnen ihre Inhalte entsprechend der aktuellen Konfiguration an.

Rufen Sie getResources().getConfiguration() auf, um die aktuelle Konfiguration zu ermitteln. auf die aktuelle Aktivität. Verwenden Sie nicht die Konfiguration der Hintergrundaktivität oder der Systemressource. Die Hintergrundaktivität hat keine Größe und die Systemkonfiguration ist möglicherweise mehrere Fenster mit widersprüchlichen Größen und Ausrichtungen enthalten, daher können keine Daten extrahiert werden können.

Beachten Sie, dass die Fenstergröße und die Bildschirmgröße nicht identisch sind. Um die Fenstergröße in DP, Activity.getResources().getConfiguration().screenWidth verwenden und Activity.getResources().getConfiguration().screenHeight. Wahrscheinlich die Bildschirmgröße nie verwenden.

Inhaltsgrenzen

Die Inhaltsgrenzen eines Fensters können sich nach der Größenänderung ändern. Zum Beispiel kann der Bereich innerhalb Das von der App verwendete Fenster kann sich ändern, wenn es zu groß wird, um auf den Bildschirm passen. Beachten Sie die folgenden Richtlinien:

  • Apps, die den Layoutprozess von Android nutzen, werden automatisch angeordnet im verfügbaren Bereich.
  • Systemeigene Apps müssen den verfügbaren Bereich lesen und Größenänderungen überwachen, um das zu vermeiden nicht zugängliche UI-Elemente haben. Rufen Sie die folgenden Methoden auf, um die anfängliche verfügbare Größe für diese Oberfläche:

    • NativeActivity.mLastContent[X/Y/Width/Height]()
    • findViewById(android.R.id.content).get[Width/Height]()

    Kontinuierliches Monitoring kann mithilfe eines Beobachters erfolgen:

    • NativeActivity.onContentRectChangedNative()
    • NativeActivity.onGlobalLayout()
    • view.addOnLayoutChangeListener(findViewById(android.R.id.content)) einen Listener hinzufügen

    Falls das Artwork in der App vorab skaliert wird, sollten Sie dies jedes Mal tun, wenn sich die Auflösung ändert.

Größenanpassung in freiem Format

Mit ChromeOS kann jedes Fenster frei angepasst werden: Nutzer können die Größe eines Fensters ändern. Breite, Höhe und Position auf dem Bildschirm. Viele Android-Apps wurden ohne kostenlose Größenanpassung. Berücksichtigen Sie folgende Punkte:

  • Die Bildschirmposition kann sich ändern. Verwenden Sie immer die Methode zur Durchführung von Fenster-zu-Bildschirm- und Bildschirm-zu-Fenster-Koordinatentransformationen.
  • Wenn Sie das Ansichtssystem von Android verwenden, automatisch angepasst wird, wenn sich die Größe ändert.
  • Wenn du das Ansichtssystem nicht verwendest und die Oberfläche übernimmst, muss deine App Größenänderungen selbst zu bewältigen.
  • Für systemeigene Apps können Sie die mLastContent-Mitglieder verwenden oder die Contentansicht verwenden, um die anfängliche Größe bestimmen.
  • Wenn die App ausgeführt wird, hören Sie onContentRectChangedNative oder onGlobalLayout-Ereignisse, um auf Größenänderungen zu reagieren.
  • Wenn sich die Größe der App ändert, Layouts und Artwork neu skalieren oder neu laden und Eingabebereiche aktualisieren.

Vollbildmodus

Der Vollbildmodus funktioniert genauso wie der standardmäßige Android-Modus. Wenn das Fenster nicht den gesamten Bildschirm abdeckt, wird der Vollbildmodus angefordert. (alle System-UI-Elemente werden ausgeblendet) werden ignoriert. Wenn die App maximiert wird, wie die normalen Vollbildmethoden, -Layouts und -funktionen ausgeführt werden. Dadurch werden die Elemente der System-UI (Fenstersteuerungsleiste und die Ablage) ausgeblendet.

Bildschirmausrichtung

Die gängigste Ausrichtung für eine Android-App ist das Hochformat. die meisten Smartphones in der Hand gehalten werden. Ein Hochformat eignet sich gut für Smartphones, Laptops und Tablets, wobei das Querformat bevorzugt wird. Um die besten Ergebnisse für Ihre App erzielen, sollten Sie erwägen, beide Ausrichtungen zu unterstützen.

Bei einigen Android-Apps wird davon ausgegangen, dass das Gerät, wenn es im Hochformat gehalten wird, das Gerät Rotationswert ist Surface.ROTATION_0 Dies könnte auf die meisten Android-Geräte zutreffen. Wenn sich die App jedoch in einem sicher ARC-Modus, ist der Rotationswert für das Hochformat möglicherweise nicht gleich Surface.ROTATION_0

Um beim Ablesen des Beschleunigungsmessers o. Ä. einen genauen Drehwert zu erhalten Sensoren verwenden, Display.getRotation() und tauschen Sie die Achse entsprechend.

Stammaktivität und Ausrichtung

Ein Chromebook-Fenster besteht aus einem Stapel von Aktivitätsfenstern. Jedes Fenster im Stapel dieselbe Größe und Ausrichtung hat.

Plötzliche Änderungen an der Ausrichtung und Größe sind auf einem Desktop-Computer verwirrend. zu verbessern. Der Chromebook-Fenstermanager vermeidet dies auf ähnliche Weise zum Side-by-Side-Modus von Android: die Aktivität am unteren Rand der Stapelsteuerelemente aller übergeordneten Aktivitäten. Dies kann zu unerwarteten Situationen führen. Eine neu gestartete Aktivität im Hochformat mit nicht anpassbarer Größe wird zum Querformat. und die Größe anpassen.

Der Gerätemodus hat hier Auswirkungen: Im Tabletmodus ist die Ausrichtung nicht gesperrt und Jedes Fenster behält seine eigene Ausrichtung, wie es bei Android üblich ist.

Richtlinien für die Ausrichtung

Beachte die folgenden Richtlinien für die Handhabung der Ausrichtung:

  • Wenn du nur eine Ausrichtung unterstützt, füge die Informationen dem Manifest hinzu, damit der Fenstermanager davon weiß, bevor die Anwendung gestartet wird. Wenn Sie Ausrichtung festlegen. Wenn möglich, geben Sie auch die Sensorausrichtungen an. Chromebooks sind oft Convertibles. Wenn die App auf dem Kopf steht, ist das nicht nutzerfreundlich.
  • Versuchen Sie, bei einer einzelnen Ausrichtung zu bleiben. Vermeiden Sie es, nur eine Ausrichtung anzufordern. im Manifest und legen später programmatisch ein weiteres fest.
  • Seien Sie vorsichtig, wenn Sie die Ausrichtung an die Fenstergröße anpassen. Die Nutzenden erhalten möglicherweise in einem kleinen Fenster im Hochformat feststecken und nicht zu einem größeren Querformat.
  • In Chrome gibt es Fenstersteuerelemente, mit denen Sie zwischen allen verfügbaren Layouts. Mit der richtigen Ausrichtung können Sie dafür sorgen, das richtige Layout hat. Ob eine App im Hochformat verfügbar ist und Querformat wählen, sollten Sie nach Möglichkeit die Standardeinstellung Querformat verwenden. Nach dem Festlegen dieser Option werden für die jeweilige App gespeichert.
  • Vermeiden Sie unnötige Änderungen der Ausrichtung. Wenn zum Beispiel die Aktivität Ausrichtung ist Hochformat, aber die App ruft setRequestedOrientation(LANDSCAPE) auf Das führt zu einer unnötigen Größenanpassung des Fensters, was für den Nutzer und die App wird möglicherweise neu gestartet, damit sie die App nicht verarbeiten kann. Es ist besser, die Ausrichtung nur einmal, z. B. im Manifest, und ändere sie nur wenn nötig.

Weitere Überlegungen

Hier sind einige weitere Dinge, die Sie bei der Arbeit mit Android-Apps in ChromeOS:

  • Rufe finish() nicht in der onDestroy-Methode deiner Aktivität auf. Dies führt dazu, dass die App wird beim Ändern der Größe geschlossen und nicht neu gestartet.
  • Verwenden Sie keine nicht kompatiblen Fenstertypen, z. B. TYPE_KEYGUARD und TYPE_APPLICATION_MEDIA.
  • Beschleunigen Sie Neustarts von Aktivitäten, indem Sie Objekte im Cache speichern, die die zuvor zugewiesen wurden.
  • Wenn Sie nicht möchten, dass Nutzer die Größe Ihrer Anwendung anpassen, geben Sie android:resizeableActivity=false in der Manifestdatei.
  • Testen Sie Ihre App, um sicherzustellen, dass sie Änderungen in Fenstergröße entsprechend anzupassen.