Deine App funktioniert auf Smartphones im Hochformat gut, daher hast du sie auf das Hochformat beschränkt. Sie sehen jedoch eine Möglichkeit, auf großen Bildschirmen im Querformat mehr zu tun.
Wie kannst du beides haben: die App auf kleinen Bildschirmen auf das Hochformat beschränken, aber auf großen Bildschirmen das Querformat aktivieren?
Best Practices
Die besten Apps berücksichtigen die Einstellungen der Nutzer, z. B. die Bildschirmausrichtung.
In den Qualitätsrichtlinien für adaptive Apps wird empfohlen, dass Apps alle Gerätekonfigurationen unterstützen, einschließlich Hoch- und Querformat, Mehrfenstermodus sowie zu- und aufgeklappter Zustand von faltbaren Geräten. Apps sollten Layouts und Benutzeroberflächen für verschiedene Konfigurationen optimieren und den Status bei Konfigurationsänderungen speichern und wiederherstellen.
Dieses Rezept ist eine vorübergehende Maßnahme – eine Prise Unterstützung für große Bildschirme. Verwende das Rezept, bis du deine App so verbessern kannst, dass sie alle Gerätekonfigurationen vollständig unterstützt.
Zutaten
screenOrientation: Einstellung im App-Manifest, mit der Sie festlegen können, wie Ihre App auf Änderungen der Geräteausrichtung reagiertActivity#setRequestedOrientation(): Methode, mit der Sie die App-Ausrichtung zur Laufzeit ändern könnenLocalConfiguration: Ein zusammensetzbarer lokaler Anbieter, der das aktuelle GerätConfigurationverfügbar macht, sodass Sie die Bildschirmabmessungen in DP ablesen können.LaunchedEffect: Compose-API für Nebenwirkungen, die einen Codeblock ausführt, wenn sich ein Schlüssel ändert (in diesem Fall, wenn sich die Konfiguration ändert).
Schritte
Aktivieren Sie im App-Manifest die Standardeinstellung, dass die App Änderungen der Ausrichtung verarbeiten kann. Verwenden Sie dann zur Laufzeit Jetpack Compose, um die Ausrichtung auf kompakten Bildschirmen (Smartphones) dynamisch auf das Hochformat zu beschränken, während auf großen Bildschirmen alle Ausrichtungen zulässig sind.
1. Ausrichtungseinstellung im App-Manifest angeben
Du kannst entweder das Element screenOrientation des App-Manifests nicht deklarieren (in diesem Fall wird die Ausrichtung standardmäßig auf unspecified festgelegt) oder die Bildschirmausrichtung auf fullUser festlegen. Wenn der Nutzer die sensorbasierte Drehung nicht gesperrt hat, unterstützt deine App alle Geräteausrichtungen.
<activity
android:name=".MyActivity"
android:screenOrientation="fullUser">
Der Unterschied zwischen der Verwendung von unspecified und fullUser ist subtil, aber wichtig. Wenn du keinen screenOrientation-Wert deklarierst, wählt das System die Ausrichtung aus. Die Richtlinie, die das System zum Definieren der Ausrichtung verwendet, kann von Gerät zu Gerät unterschiedlich sein. Wenn du dagegen fullUser angibst, entspricht das eher dem vom Nutzer für das Gerät definierten Verhalten: Wenn der Nutzer die sensorbasierte Drehung gesperrt hat, folgt die App der Nutzereinstellung. Andernfalls lässt das System eine der vier möglichen Bildschirmausrichtungen zu (Hochformat, Querformat, umgekehrtes Hochformat oder umgekehrtes Querformat). Siehe android:screenOrientation.
2. Ausrichtung in Compose dynamisch einschränken
In Jetpack Compose können Sie die aktuellen Bildschirmabmessungen in DP reaktiv aus LocalConfiguration.current lesen und mit einem LaunchedEffect die Ausrichtung der Aktivität aktualisieren, wenn sich die Konfiguration ändert.
Wenn die Breite oder Höhe des Bildschirms kleiner als 600dp ist (entspricht dem kompakten Haltepunkt für Smartphones), beschränke die Ausrichtung auf das Hochformat. Andernfalls sollte das System die App entsprechend der Einstellung des Nutzers (unspecified oder fullUser) drehen können.
Hier ist die vollständige, kompilierbare Implementierung:
val configuration = LocalConfiguration.current val context = LocalActivity.current LaunchedEffect(configuration) { val activity = context ?: return@LaunchedEffect // Determine if screen is compact (phone-sized) in either width or height val isCompact = configuration.screenWidthDp < 600 || configuration.screenHeightDp < 600 activity.requestedOrientation = if (isCompact) { ActivityInfo.SCREEN_ORIENTATION_PORTRAIT } else { ActivityInfo.SCREEN_ORIENTATION_FULL_USER } }
Wenn Sie die Logik in einem LaunchedEffect(configuration)-Block hinzufügen, können Sie die Ausrichtungseinstellung reaktiv überschreiben, wenn sich die App-Konfiguration ändert, z. B. wenn die Größe der Aktivität geändert wird, sie zwischen Displays verschoben wird oder wenn ein faltbares Gerät gefaltet oder entfaltet wird.
Weitere Informationen dazu, wann Konfigurationsänderungen auftreten und wann sie eine Neuerstellung der Aktivität verursachen, finden Sie unter Konfigurationsänderungen verarbeiten.
Ergebnisse
Ihre App sollte jetzt auf kleinen Bildschirmen unabhängig von der Gerätedrehung im Hochformat bleiben. Auf großen Bildschirmen sollte die App das Quer- und Hochformat unterstützen.
Zusätzliche Ressourcen
Informationen zum Aktualisieren Ihrer App, damit sie alle Gerätekonfigurationen jederzeit unterstützt, finden Sie hier:
- Verschiedene Bildschirmgrößen unterstützen
- Konfigurationsänderungen verarbeiten
- UI-Zustände speichern