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.
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.
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 beispielsweiseandroid: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
oderonGlobalLayout
-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 deronDestroy
-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
undTYPE_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.