Android aktiviert einen Kompatibilitätsmodus für Apps, die Einschränkungen für die Ausrichtung oder Größe angeben. Der Kompatibilitätsmodus sorgt für ein akzeptables App-Verhalten auf Geräten mit großen Bildschirmen und faltbaren Klapphandys, bei nicht optimaler Nutzerfreundlichkeit.
Mit App-spezifischen Überschreibungen können Gerätehersteller das App-Verhalten ändern, um die Nutzerfreundlichkeit zu verbessern oder zu verhindern, dass Apps auf bestimmten Geräten nicht funktionieren.
Referenzgeräte
Für die folgenden Geräte sind möglicherweise App-spezifische Überschreibungen erforderlich, da sie ungewöhnliche Konfigurationen haben oder Konfigurationen, die von Apps nicht gut unterstützt werden:
- Tablets: Die Standardausrichtung einiger Tablets wie Pixel Tablet ist Querformat. Ein Gerät befindet sich in der natürlichen Ausrichtung, wenn
Display#getRotation()
den WertSurface.ROTATION_0
zurückgibt. Wenn Apps voraussetzen, dassROTATION_0
im Hochformat ist, können App-Layout und Kameravorschau nicht zum Gerätedisplay passen. - Im Querformat faltbare Geräte: Einige faltbare Geräte wie Pixel Fold sind im Hochformat, wenn sie zusammengeklappt sind, und im Querformat, wenn sie aufgeklappt sind. Wenn Apps davon ausgehen, dass das Tablet im aufgeklappten Zustand im Hochformat gehalten wird, sind flackernde Schleifen oder Layoutprobleme wahrscheinlich.
- Klappbare Smartphones: Entfaltete Smartphones sind in der Regel im Hochformat. Wenn sie jedoch zusammengeklappt sind, haben sie in der Regel ein kleines Display im Querformat. Apps müssen die verschiedenen Ausrichtungen der Bildschirme identifizieren und berücksichtigen.
Häufige Kompatibilitätsprobleme
Kompatibilitätsprobleme bei Apps treten am häufigsten aufgrund von Einschränkungen bei der App-Ausrichtung, Größenänderungs- und Seitenverhältnissen, einer falschen Ausrichtung der Kameravorschau und falsch verwendeten APIs auf.
Letterboxing
Mit Letterboxing-Balken wird die App in der Mitte des Bildschirms oder bei großen Bildschirmen auf eine Seite oder die andere Seite positioniert, um einen bequemen Zugriff zu ermöglichen. Mattes (einfarbige Balken oder weichgezeichneter Hintergrund) füllen den nicht verwendeten Anzeigebereich an den Seiten oder am oberen und unteren Rand der App aus.
Letterboxing tritt häufig auf Geräten mit großen Bildschirmen auf, da sich die Abmessungen und das Seitenverhältnis des Displays des Geräts in der Regel von denen von Standard-Smartphones unterscheiden, für die die meisten Apps entwickelt wurden.
Problem
Die App unterstützt nicht alle Displaykonfigurationen, da sie eine feste Ausrichtung und ein festes Seitenverhältnis aufweist oder ihre Größe nicht angepasst werden kann.
Zu den Konfigurationseinstellungen, die die Ausrichtung und Größe der App steuern, gehören:
screenOrientation
: Gibt eine feste Ausrichtung für eine App an. Apps können die Ausrichtung auch zur Laufzeit mitActivity#setRequestedOrientation()
festlegen.resizeableActivity
: Gibt an, ob das System die Größe von Apps so anpassen kann, dass sie in Fenster mit unterschiedlichen Abmessungen passen. Unter Android 11 (API-Level 30) und niedriger gibt an, ob Apps den Mehrfenstermodus unterstützen. Gibt ab Android 12 (API-Level 31) an, ob Apps den Mehrfenstermodus auf kleinen Bildschirmen unterstützen (kompakte Fenstergrößenklasse). Unter Android 12 und höher unterstützen Apps den Multifenstermodus auf großen Bildschirmen (mittlere oder erweiterte Fenstergröße) unabhängig von dieser Einstellung.maxAspectRatio
: Gibt das maximale von der App unterstützte Seitenverhältnis an.maxAspectRatio
kann nur für Apps festgelegt werden, bei denenresizeableActivity
auffalse
festgelegt ist.minAspectRatio
: Gibt das Mindestseitenverhältnis an, das von der App unterstützt wird.minAspectRatio
kann nur für Apps festgelegt werden, bei denenresizeableActivity
auffalse
gesetzt ist.
Optimierung
Die App sollte alle Displayausrichtungen und -größen von Geräten und den Multifenstermodus unterstützen. Entferne alle Einschränkungen in Bezug auf Ausrichtung und feste Seitenverhältnisse aus deinen App-Layouts und der App-Manifest-Datei.
Problemumgehung für Kompatibilität
Wenn eine App mit fester Ausrichtung oder festem Seitenverhältnis in einem Fenster ausgeführt wird, in dem die App die Fenstergröße oder -ausrichtung nicht direkt unterstützt, wird die App von Android in einem Letterbox-Format dargestellt, um die Kontinuität zu wahren.
Ab Android 12 (API-Level 31) und 12L (API-Level 32) wendet die Plattform eine Vielzahl von Verbesserungen an Apps im Letterbox-Format an. Gerätehersteller implementieren Verbesserungen der Benutzeroberfläche. Sie müssen keine zusätzlichen Entwicklungsarbeiten für Ihre App vornehmen, um von den Verbesserungen zu profitieren.
Mit Android 12 (API-Ebene 31) werden die folgenden optischen Verbesserungen eingeführt, die von Geräteherstellern konfiguriert werden können:
- Abgerundete Ecken:Die Ecken des App-Fensters werden jetzt noch übersichtlicher.
- Transparenz der Systemleiste:Status- und Navigationsleisten, die die App überlagern, sind halbtransparent. Symbole auf den Balken sind also immer über dem Letterbox-Hintergrund sichtbar.
- Konfigurierbares Seitenverhältnis:Das Seitenverhältnis der App kann angepasst werden, um das Erscheinungsbild der App zu verbessern.
12L (API-Level 32) bietet die folgenden Funktionsverbesserungen:
Konfigurierbare Positionierung:Auf großen Bildschirmen können Gerätehersteller die App links oder rechts vom Bildschirm positionieren, um die Interaktion zu erleichtern.
Neu gestaltete Neustart-Schaltfläche: Gerätehersteller können die Schaltfläche zum Neustart für den Größenkompatibilitätsmodus neu gestalten, damit sie von den Nutzern besser erkannt wird.
In Android 13 (API-Level 33) wird ein Dialogfeld zur Aufklärung von Nutzern zur Positionierung der App im Letterbox-Format auf dem Bildschirm oder zum Einfügen des Letterbox-Formats im Splitscreen-Modus angezeigt:
Größenkompatibilitätsmodus
Der Modus für die Größenkompatibilität ist ein Letterbox-Modus mit einer Schaltfläche zum Neustarten. Über das Steuerelement können Nutzer die App neu starten und die Anzeige neu zeichnen. Android ruft den Kompatibilitätsmodus für die Größe für Apps auf, die nicht skalierbar sind. Wenn eine Aktivität in einen Displaycontainer verschoben wird, der nicht mit den Abmessungen der Aktivität kompatibel ist, kann das System die App so skalieren, dass sie mindestens eine Geräteanzeigedimension ausfüllt.
Zu den Änderungen an der Gerätekonfiguration, die den Größenkompatibilitätsmodus auslösen können, gehören:
- Bildschirm drehen
- Faltbares Gerät wird zusammengeklappt oder aufgeklappt
- Zwischen Vollbildmodus und Splitscreen wechseln
Problem
Der Größenkompatibilitätsmodus gilt in der Regel für Aktivitäten, bei denen die Ausrichtung oder das Seitenverhältnis eingeschränkt und die Konfiguration (oder vom System) so konfiguriert ist, dass die Größe nicht geändert werden kann.
Ihre App gilt als skalierbar und wird nicht in den Größenkompatibilitätsmodus versetzt, wenn sie eines der folgenden Kriterien erfüllt:
- Sie können mit
resizeableActivity="true"
die Größe ändern. - Unterstützt den Bild im Bild-Modus (BiB)
- Ist eingebettet
- Wurde die App-spezifische Überschreibung
FORCE_RESIZE_APP
vom Gerätehersteller angewendet? (Von der App festgelegte Eigenschaften werden ignoriert.)
Wenn Ihre App keine dieser Bedingungen erfüllt, kann die Größe nicht angepasst werden. In diesem Fall kann die App in den Größenkompatibilitätsmodus versetzt werden.
Optimierung
Die App sollte alle Bildschirmgrößen unterstützen. Du kannst die Größe der App anpassen, indem du das Attribut android:resizeableActivity
des Elements <activity>
oder <application>
im App-Manifest auf true
setzt. Entwerfen Sie responsive/adaptive Layouts für Ihre App. Weitere Informationen finden Sie unter Unterstützung verschiedener Bildschirmgrößen und Unterstützung des Multifenstermodus.
Problemumgehung für Kompatibilität
Android versetzt eine App in den Modus für die Größenkompatibilität, wenn das System feststellt, dass die Anzeige der App im Letterbox-Format verbessert werden kann, indem die App so skaliert wird, dass sie das Displayfenster in mindestens einer Dimension ausfüllt. Das System zeigt eine Schaltfläche zum Neustarten an, mit der der App-Prozess neu erstellt, die Aktivität neu erstellt und das Display neu gezeichnet wird. Siehe auch Übersicht über Prozesse und Threads.
Flackernde Schleifen
Wenn eine App nicht alle Bildschirmausrichtungen unterstützt, fordert sie bei einer Konfigurationsänderung möglicherweise wiederholt eine neue Ausrichtung an. Dadurch entsteht eine Endlosschleife, durch die das Display flackert oder die App endlos gedreht wird.
Problem
Unter Android 12 (API-Level 31) und höher können Gerätehersteller ihre Geräte so konfigurieren, dass von Apps angegebene Ausrichtungsbeschränkungen ignoriert und stattdessen Kompatibilitätsmodi erzwungen werden. So kann beispielsweise auf einem faltbaren Gerät die Einstellung android:screenOrientation="portrait"
für eine Aktivität ignoriert werden, wenn die Aktivität auf dem inneren Bildschirm des Geräts in der Tablet-Größe im Querformat angezeigt wird.
Wenn die Ausrichtungseinschränkungen einer App ignoriert werden, kann die App ihre Ausrichtung programmatisch festlegen, indem Activity#setRequestedOrientation()
aufgerufen wird. Der Aufruf löst einen App-Neustart aus, wenn die App Konfigurationsänderungen nicht verarbeitet (siehe Konfigurationsänderungen verarbeiten). Nach dem Neustart werden die Ausrichtungsbeschränkungen der App wieder ignoriert, die App wiederholt den Aufruf von setRequestedOrientation()
, der Aufruf löst einen App-Neustart aus usw. in einer sich selbst erhaltenden Schleife aus.
Eine andere Möglichkeit ist, wenn die natürliche Ausrichtung (die von Android festgelegte normale Ausrichtung) eines Gerätebildschirms im Querformat ist (d. h. beim Aufrufen von Display#getRotation()
wird Surface.ROTATION_0
zurückgegeben, während das Gerät ein Querformat hat). Bisher wurde in Apps davon ausgegangen, dass Display.getRotation() =
Surface.ROTATION_0
bedeutet, dass sich das Gerät im Hochformat befindet. Das ist aber nicht immer der Fall, z. B. auf dem inneren Display einiger faltbarer Geräte und auf einigen Tablets.
Eine App im Querformat auf einem faltbaren inneren Display kann die Bildschirmdrehung prüfen, den Wert ROTATION_0
erhalten, davon ausgehen, dass die natürliche Ausrichtung des Geräts im Hochformat ist, und setRequestedOrientation(
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
)
aufrufen, um das App-Layout neu zu konfigurieren. Nach dem Neustart der Anwendung (im Querformat) kann sie die Bildschirmdrehung noch einmal prüfen, den Wert ROTATION_0
erhalten, setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)
aufrufen und die Endlosschleife fortsetzen.
Optimierung
Apps dürfen Folgendes nicht tun:
- Legen Sie in der Aktivitätsmethode
onCreate()
mitActivity#setRequestedOrientation()
eine Standardausrichtung fest, da die Ausrichtungsanfrage durch nicht verarbeitete Konfigurationsänderungen unerwartet ausgelöst werden kann. - Angenommen, die natürliche Ausrichtung des Geräts (
ROTATION_0
) ist das Hochformat. - Legen Sie die Ausrichtung anhand von Signalen fest, die nicht mit der aktuellen Fenstergröße zusammenhängen, z. B.
Display#getRotation()
, das Vorhandensein einerFoldingFeature
oder verworfene APIs.
Problemumgehung für Kompatibilität
Android ignoriert Activity#setRequestedOrientation()
-Aufrufe in den folgenden Situationen:
Die Aktivität wurde bereits aus einem vorherigen Aufruf der Methode neu gestartet oder die kompatible Kamerarotationsbehandlung wurde aktiviert (siehe Kameravorschau unten).
Gerätehersteller können dieses Verhalten auf eine App mit
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION
anwenden.Bei der Aktivität wurden in einer Sekunde mehr als zwei Anfragen zur Ausrichtung gesendet. Dies weist auf eine Schleife hin. Von den beiden Anfragen in der Schleife verwendet Android diejenige, die den Anzeigebereich der App maximiert.
Gerätehersteller können dieses Verhalten auf eine App mit
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED
anwenden.
Kameravorschau
Die Kameravorschau (oder der Sucher) von Kamera-Apps kann auf Tablets, Laptops und faltbaren Displays falsch ausgerichtet oder verzerrt sein.
Problem
Im Android Compatibility Definition Document ist festgelegt, dass ein Kamera-Bildsensor "MÜSSEN so ausgerichtet werden muss, dass die lange Seite der Kamera mit der des Bildschirms übereinstimmt".
Apps gehen häufig davon aus, dass die Geräteausrichtung und die Ausrichtung des Kamerasensors im Hochformat sind – eine vernünftige Annahme bei Standard-Smartphones. Die natürliche Ausrichtung von Tablets und Laptops sowie ihrer Kamerasensoren kann jedoch im Querformat sein. Außerdem können neue Formfaktoren wie faltbare Smartphones mehrere natürliche Ausrichtungen und mehrere Kamerasensoren mit unterschiedlicher Ausrichtung haben.
Wenn Sie eine Aktivität mit einer Kameraausrichtung starten, die von der App nicht erwartet wird, oder zwischen verschiedenen Kameras oder Gerätebildschirmen wechseln (bei Klappgeräten), kann dies zu einer nicht ausgerichteten oder verzerrten Kameravorschau führen.
Optimierung
Kamera-Apps müssen die Geräteausrichtung und die Ausrichtung des Kamerasensors korrekt identifizieren und verwalten, damit eine korrekt ausgerichtete und skalierte Kameravorschau angezeigt wird. Apps müssen die Gerätedrehung, die Sensordrehung und das Bildschirm- oder Fensterseitenverhältnis berechnen und dann die Ergebnisse auf die Kameravorschau anwenden. Detaillierte Informationen finden Sie unter Kameravorschau und Einführung in den Kamerasucher.
Kompatibilitäts-Problemumgehung
Ein Gerät befindet sich in der natürlichen Ausrichtung, wenn Display#getRotation()
Surface.ROTATION_0
zurückgibt. Das System berechnet CameraCharacteristics.SENSOR_ORIENTATION
anhand der natürlichen Ausrichtung des Geräts. Android richtet das Hochformatfenster von Apps, die nur im Hochformat ausgeführt werden können, an der natürlichen Ausrichtung des Geräts aus, was von den meisten Apps erwartet wird. Android schneidet das Kamerasensorbild auch zu, wenn die Sensorausrichtung im Querformat und die Kameravorschau im Hochformat ist. Zu den konkreten Problemumgehungen gehören:
Kameravorschau für Apps mit Hochformatbeschränkung erzwingen: Bei Apps, die nur im Hochformat verwendet werden können, wird davon ausgegangen, dass sich das Gerät und der Kamerasensor im Hochformat befinden. Unter Android 12 (API-Level 31) und höher können Apps jedoch in mehreren Geräteausrichtungen ausgeführt werden, wenn die Gerätehersteller die Ausrichtungsspezifikation ignorieren.
Wenn eine App mit eingeschränktem Hochformat mit der Kamera verbunden ist, dreht Android die App, um das Fenster im Hochformat der App an die natürliche Ausrichtung des Geräts auszurichten.
Auf einigen Tablets (siehe Referenzgeräte) wird das Hochformatfenster der App in den Vollbildmodus im Hochformat gedreht, um der natürlichen Ausrichtung des Geräts zu entsprechen. Die App nimmt nach der erzwungenen Drehung den gesamten Bildschirm ein.
Auf dem inneren Display von faltbaren Geräten im Querformat (siehe Referenzgeräte) werden Aktivitäten im Hochformat in das Querformat gedreht, damit es der aufgeklappten natürlichen Ausrichtung entspricht. Die Anwendung wird nach der erzwungenen Drehung mit Letterbox-Balken versehen.
Innerer Frontkamera zuschneiden:Der Sensor der inneren Frontkamera befindet sich bei einigen faltbaren Smartphones im Querformat. Zusätzlich zur erzwungenen Drehung der Kameravorschau auf dem faltbaren inneren Display schneidet Android das Sichtfeld der inneren Frontkamera (Querformat) so ab, dass der Sensor das Sichtfeld der Geräteausrichtung entgegennimmt.
Aktualisierung der Kameravorschau erzwingen:Nach der erzwungenen Drehung durchläuft das System die Aktivitätsmethoden
onStop()
undonStart()
(standardmäßig) oderonPause()
undonResume()
(durch die Überschreibung pro App OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE angewendet), um sicherzustellen, dass die Kameravorschau richtig angezeigt wird.Bildseitenverhältnis skalieren: Das System ändert das Seitenverhältnis der erzwungenen Kameravorschau dynamisch in ein höheres Mindestseitenverhältnis, damit die Kameravorschau richtig skaliert wird.
App-Entwickler können diese Umgehungslösungen überschreiben, wenn die Apps die Kameravorschau richtig verarbeiten. Weitere Informationen finden Sie unter App-spezifische Überschreibungen.
Häufig missbrauchte APIs
Da Android Funktionen wie den Mehrfenstermodus und Geräte wie faltbare Geräte unterstützt, wurden Legacy-APIs eingestellt und durch aktuelle APIs ersetzt, die für alle Displaygrößen und Geräteformfaktoren funktionieren. Die verworfenen APIs sind jedoch aus Gründen der Abwärtskompatibilität weiterhin verfügbar.
Einige View
APIs sind für spezielle Zwecke konzipiert, die Entwicklern nicht immer klar sind.
Problem
Entwickler verwenden weiterhin eingestellte Display
APIs und gehen fälschlicherweise davon aus, dass die APIs die App-Grenzen anstelle der Grenzen des Anzeigebereichs der Geräte zurückgeben. Oder Entwickler verwenden fälschlicherweise APIs für spezielle Ansichten, um allgemeine Displaymesswerte zu erhalten.
Dies führt zu Fehlberechnungen bei der Neupositionierung von UI-Elementen nach Größenänderungsereignissen des App-Fensters, was zu Layoutproblemen führt.
Eingestellte und häufig missbrauchte Display-APIs:
Weitere Informationen findest du unter Unterstützung des Mehrfenstermodus.
Falsch verwendete Ansichts-APIs:
Optimierung
Verlassen Sie sich bei der Positionierung von UI-Elementen niemals auf die physische Anzeigegröße. Migrieren Sie Ihre App zu APIs, die auf WindowMetrics
basieren, einschließlich der folgenden WindowManager
APIs:
Plattform:
Jetpack:
Kompatibilitäts-Problemumgehung
Mit zwei Überschreibungen werden die eingestellten Display
APIs und missbrauchten View
APIs so angepasst, dass die App-Begrenzungen zurückgegeben werden: ALWAYS_SANDBOX_DISPLAY_APIS
für Display
APIs und OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS
für View
APIs. ALWAYS_SANDBOX_DISPLAY_APIS
wird außerdem standardmäßig auf Apps angewendet, die für den Größenkompatibilitätsmodus infrage kommen.
Transparente Aktivitäten
Transparente Aktivitäten sind das Ergebnis von Stilen mit transparentem Hintergrund, z. B.:
<style name="Transparent" parent="AppTheme">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
</style>
Designs für Dialogfelder, z. B. Theme.MaterialComponents.Dialog
, können Stile enthalten, mit denen Aktivitäten transparent gemacht werden.
Transparente Aktivitäten bedecken nicht den gesamten verfügbaren Displaybereich. Das macht sie schwer zu verwalten, da sich der verfügbare Displaybereich je nach Konfigurationsänderungen wie Gerätedrehung, Zusammen- und Aufklappen des Geräts und Multifenstermodus ändern kann.
Problem
Eine transparente Aktivität sollte den Grenzen der ersten opaken Aktivität unterhalb der transparenten Aktivität im Aktivitätsstapel der Aufgabe entsprechen. Eine intransparente Aktivität, die einen Berechtigungsdialog startet, kann jedoch ein Trampolin sein (eine Aktivität, die eine andere Aktivität startet, dann verschwindet). Daher kann das System die Grenzen der Trampolinaktivität, durch die die transparente Berechtigungsdialogaktivität gestartet wurde, nicht bestimmen.
Optimierung
Transparente Aktivitäten übernehmen ihre Einschränkungen von der obersten opaken Aktivität unter ihnen im Aktivitätsstapel einer Aufgabe. Die opake Aktivität muss für den gesamten Lebenszyklus der transparenten Aktivität verfügbar sein, von der Erstellung bis zum Löschen der Aktivität. Daher sollten Sie keine Berechtigungsanfragen von Trampolinaktivitäten aus senden.
Wenn eine Trampolinaktivität eine Berechtigungsanfrage auslöst, kann der Nutzer das Berechtigungsdialogfeld möglicherweise nicht sehen, da die Trampolinaktivität bereits gelöscht wurde, bevor der Nutzer die Möglichkeit hatte, auf das Dialogfeld zu reagieren. Außerdem wurden die Abmessungen und die Position der Dialogaktivität möglicherweise falsch berechnet.
Apps sollten immer Berechtigungsanfragen von Aktivitäten starten, die sichtbar bleiben, bis der Nutzer eine Berechtigungsentscheidung getroffen hat.
Abgerundete Ecken
Eine Aktivität kann aufgrund eines Stils, der die Hintergrundtransparenz angibt, transparent sein. Es kann auch sein, dass der Inhalt der Aktivität den verfügbaren Anzeigebereich nicht füllt. Wenn eine transparente Aktivität den verfügbaren Platz ausfüllt, wendet das System automatisch abgerundete Ecken auf die Aktivität an, sofern vom Gerätehersteller entsprechend konfiguriert. Wenn jedoch eine transparente Aktivität (z. B. ein Berechtigungsdialog) den verfügbaren Platz nicht ausfüllt, müssen Sie entscheiden, ob Sie abgerundete Ecken verwenden möchten.
Die Berechtigungsdialogfelder füllen nicht den verfügbaren Displaybereich aus, da für das Dialogfeldlayout in der Regel LayoutParams.WRAP_CONTENT anstelle von LayoutParams.MATCH_PARENT verwendet wird.
Problemumgehung für Kompatibilität
Aktivitäten, die Dialogaktivitäten starten, bleiben sichtbar, bis der Nutzer auf den Dialog reagiert hat.
Das System sorgt dafür, dass eine transparente Aktivität alle Einschränkungen von der ersten opaken Aktivität unter der transparenten Aktivität im Aktivitätsstapel erbt, einschließlich Einschränkungen im Zusammenhang mit:
- Modus für die Größenkompatibilität
- Ausrichtung
- Seitenverhältnis
Unity-Spiele
Unity-Spiele werden auf Android-Geräten im Vollbildmodus oder im Multifenstermodus ausgeführt. Viele Unity-Spiele verlieren jedoch den Fokus und beenden das Zeichnen von Inhalten, wenn sich die App im Mehrfenstermodus befindet.
Problem
Unity hat in Unity 2019.4 eine Resizable Window
-Option hinzugefügt, um den Mehrfenstermodus unter Android zu unterstützen. Die ursprüngliche Implementierung hat jedoch nicht richtig auf den Aktivitätslebenszyklus im Mehrfenstermodus reagiert, was dazu führte, dass UnityPlayer die Wiedergabe anhält, wenn die App den Fokus verliert. Der Spieler hat einen schwarzen Bildschirm oder den letzten eingefrorenen Frame des Spiels gerendert. Das Gameplay wurde nur fortgesetzt, wenn der Nutzer auf den Bildschirm getippt hat. Viele Anwendungen, die die Unity-Engine verwenden, sind mit diesem Problem konfrontiert und werden im Mehrfenstermodus als schwarzes Fenster gerendert.
Optimierung
Führen Sie ein Upgrade auf Unity 2019.4.40 oder höher durch und exportieren Sie Ihr Spiel noch einmal. Lass die Option Resizable Window
in den Android-Player-Einstellungen aktiviert. Andernfalls wird das Spiel pausiert, wenn es nicht im Fokus ist, auch wenn es im Multifenstermodus vollständig sichtbar ist.
Kompatibilitäts-Problemumgehung
Gerätehersteller können die Überschreibung OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS
pro App anwenden, um einer App im Mehrfenstermodus ein fiktives Fokusereignis bereitzustellen. Durch die Überschreibung können Inhalte in der Aktivität neu gezeichnet werden und werden nicht ausgeblendet.
App auf Kompatibilitätsprobleme testen
Nutzen Sie die folgenden Ressourcen, um Ihre Anwendung zu testen und zu verstehen, wie sie sich bei verschiedenen Formfaktoren verhält:
- Gerätestreaming: Informationen zum Testen Ihrer App auf Produktionsgeräten (einschließlich Referenzgeräten), die in Google-Rechenzentren gehostet werden, finden Sie unter Android Device Streaming, powered by Firebase.
- Emulatoren in Android Studio Hedgehog:Informationen zum Erstellen von Emulatoren für Referenzgeräte finden Sie unter Virtuelle Geräte erstellen und verwalten
- In Android Studio skalierbarer Emulator: Informationen zum Zugriff auf virtuelle Geräte finden Sie unter Apps im Android-Emulator ausführen.
Ist Letterbox-Bild
Prüfen Sie, ob jede Aktivität den gesamten für die App verfügbaren Displaybereich nutzen kann. deklarieren Sie zuerst den folgenden Code in Ihrem Testordner:
Kotlin
fun Activity.isLetterboxed() : Boolean { if (isInMultiWindowMode) return false val wmc = WindowMetricsCalculator.getOrCreate() val currentBounds = wmc.computeCurrentWindowMetrics(this).bounds val maxBounds = wmc.computeMaximumWindowMetrics(this).bounds val isScreenPortrait = maxBounds.height() > maxBounds.width() return if (isScreenPortrait) { currentBounds.height() < maxBounds.height() } else { currentBounds.width() < maxBounds.width() } }
Java
public boolean isLetterboxed(Activity activity) { if (activity.isInMultiWindowMode()) { return false; } WindowMetricsCalculator wmc = WindowMetricsCalculator.getOrCreate(); Rect currentBounds = wmc.computeCurrentWindowMetrics(activity).getBounds() Rect maxBounds = wmc.computeMaximumWindowMetrics(activity).getBounds(); boolean isScreenPortrait = maxBounds.height() > maxBounds.width(); return (isScreenPortrait) ? currentBounds.height() < maxBounds.height() : currentBounds.width() < maxBounds.width(); }
Führen Sie dann einen Test aus, um das Verhalten zu bestätigen, und achten Sie darauf, dass die Zielaktivität keine Letterbox-Daten enthält:
Kotlin
@get:Rule val activityRule = ActivityScenarioRule(MainActivity::class.java) @Test fun activity_launched_notLetterBoxed() { activityRule.scenario.onActivity { assertThat(it.isLetterboxed()).isFalse() } }
Java
@Rule public ActivityScenarioRule<MainActivity> rule = new ActivityScenarioRule<>(MainActivity.class); public void activity_launched_notLetterBoxed() { try (ActivityScenario<MainActivity> scenario = ActivityScenario.launch(MainActivity.class)) { scenario.onActivity(activity -> { assertThat(isLetterboxed(activity)).isFalse(); }); } }
Führen Sie diese Art von Test idealerweise nur so lange durch, bis er bestanden ist und die Aktivitäten Ihrer App den gesamten für die App verfügbaren Bildschirmbereich einnehmen. Testen Sie Ihre App auf allen Gerätetypen, um ein einheitliches Verhalten zu gewährleisten.
Überschreibungen pro App
Android bietet Überschreibungen, die das konfigurierte Verhalten von Apps ändern. Die Überschreibung FORCE_RESIZE_APP
weist das System beispielsweise an, den Größenkompatibilitätsmodus zu umgehen und die App an die Displayabmessungen anzupassen, auch wenn resizeableActivity="false"
im App-Manifest angegeben ist.
Gerätehersteller wenden Überschreibungen auf bestimmte Apps – oder alle Apps – auf bestimmten Geräten mit großen Bildschirmen an. Unter Android 14 (API-Level 34) und höher können Nutzer über die Geräteeinstellungen Überschreibungen für Apps anwenden.
Überschreibungen für Nutzer pro App
Unter Android 14 und höher können Nutzer über ein Einstellungsmenü das Seitenverhältnis von Apps ändern. Geräte mit großen Bildschirmen wie die Referenzgeräte implementieren das Menü.
Das Menü enthält eine Liste aller auf dem Gerät installierten Apps. Nutzer wählen eine App aus und legen dann das Seitenverhältnis der App auf 3:4, 1:1, Vollbild oder einen anderen vom Gerätehersteller konfigurierten Wert fest. Nutzer können das Seitenverhältnis auch auf die Standardeinstellung der App zurücksetzen, die im App-Manifest angegeben ist.
Apps können die Kompatibilitätsüberschreibung deaktivieren, indem Sie die folgenden PackageManager.Property
-Tags festlegen:
PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE
Wenn Sie die nutzerseitige Überschreibung der Kompatibilität mit dem Seitenverhältnis deaktivieren möchten, fügen Sie die Property Ihrem App-Manifest hinzu und legen Sie den Wert auf
false
fest:<application> <property android:name="android.window. PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE" android:value="false" /> </application>
Ihre App wird aus der Liste der Apps in den Geräteeinstellungen ausgeschlossen. Nutzer können das Seitenverhältnis der App nicht überschreiben.
Wenn Sie die Property auf
true
festlegen, hat das keine Auswirkungen.PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_FULLSCREEN_OVERRIDE
Wenn Sie die Vollbildoption der Überschreibung des Nutzer-Seitenverhältnisses deaktivieren möchten, fügen Sie die Property Ihrem App-Manifest hinzu und legen Sie den Wert auf
false
fest:<application> <property android:name="android.window.PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_FULLSCREEN_OVERRIDE" android:value="false" /> </application>
Die Vollbildoption wird aus der Liste der Seitenverhältnisoptionen in den Geräteeinstellungen entfernt. Nutzer können die Vollbildüberschreibung nicht auf deine App anwenden.
Das Festlegen dieses Attributs auf
true
hat keine Auswirkungen.
App für alle Bildschirme optimieren:Legen Sie in Ihrer App keine Seitenverhältnisbeschränkungen fest. Verwenden Sie Fenstergrößenklassen, um verschiedene Layouts je nach verfügbarem Anzeigebereich zu unterstützen.
Überschreibungen pro App des Geräteherstellers
Gerätehersteller wenden Überschreibungen für einzelne Apps auf ausgewählten Geräten an. Die Referenzgeräte können einige der Überschreibungen standardmäßig auf eine Vielzahl von Apps anwenden.
Für Apps können die meisten Überschreibungen deaktiviert werden (siehe Tabelle Überschreibungen pro App unten).
Sie können Ihre App mit aktivierten oder deaktivierten Überschreibungen testen. Verwenden Sie dazu das Kompatibilitäts-Framework (siehe Kompatibilitäts-Framework-Tools). Wenn diese Option aktiviert ist, gelten Überschreibungen für die gesamte App.
Sie können auch die Android Debug Bridge (adb) verwenden, um Überschreibungen zu aktivieren oder zu deaktivieren und festzulegen, welche Überschreibungen für Ihre App gelten.
So aktivieren oder deaktivieren Sie Überschreibungen:
adb shell am compat enable/disable <override name/id> <package>
Prüfen Sie für die Referenzgeräte, welche Überschreibungen für Ihre App gelten:
adb shell dumpsys platform_compat | grep <package name>
In der folgenden Tabelle sind die verfügbaren Überschreibungen aufgeführt. Außerdem finden Sie dort eine Anleitung dazu, wie Sie Ihre App so optimieren, dass keine Überschreibungen erforderlich sind. Sie können Ihrem App-Manifest Attribut-Flags hinzufügen, um einige Überschreibungen zu deaktivieren.
Überschreibungen pro App | |||
---|---|---|---|
Eingeben | Name | ID | Beschreibung |
Größenanpassung | FORCE_RESIZE_APP | 174042936 | Umgeht den Größenkompatibilitätsmodus für die App bei Konfigurationsänderungen. |
FORCE_NON_RESIZE_APP | 181136395 | Erzwingt die App bei Konfigurationsänderungen in den Größenkompatibilitätsmodus. | |
Seitenverhältnis | OVERRIDE_MIN_ASPECT_RATIO | 174042980 | Gatekeeper-Überschreibung, die aktiviert werden muss, um andere Seitenverhältnisüberschreibungen anzuwenden. |
OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY | 203647190 | Wenn diese Option aktiviert ist (Standardeinstellung), werden die Einschränkungen auf Aktivitäten im Hochformat beschränkt. | |
OVERRIDE_MIN_ASPECT_RATIO_MEDIUM | 180326845 | Ändert das Mindestseitenverhältnis in 3:2. | |
OVERRIDE_MIN_ASPECT_RATIO_LARGE | 180326787 | Das Mindestseitenverhältnis wird auf 16:9 geändert. | |
OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN | 208648326 | Das Mindestseitenverhältnis wird so geändert, dass es 50 % der Bildschirmgröße (oder das Seitenverhältnis des Splitscreens) entspricht. | |
OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN | 218959984 | Hiermit wird die Überschreibung des Mindestseitenverhältnisses deaktiviert, sodass Apps im Hochformat angezeigt werden. | |
Ausrichtung | OVERRIDE_ANY_ORIENTATION | 265464455 | Ermöglicht das Überschreiben einer Ausrichtung. |
OVERRIDE_ANY_ORIENTATION_TO_USER | 310816437 | Überschreibt die Einschränkungen für Ausrichtung, Größenänderung und Seitenverhältnis. | |
OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT | 265452344 | Überschreibt die Ausrichtung auf „Hochformat“, wenn eine Aktivität keine definierte Ausrichtung hat. | |
OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR | 265451093 | Überschreibt die Ausrichtung mit nosensor (natürliche Ausrichtung des Geräts), wenn eine Aktivität keine definierte Ausrichtung hat. |
|
OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE | 266124927 | Apps, die nur im Querformat angezeigt werden, werden um 180 Grad gedreht. | |
OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA | 265456536 | Beschränkt den Bereich zum Überschreiben der Ausrichtung auf den Bereich, wenn die App mit der Kamera verbunden ist. | |
OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION | 255940284 | Setzt die Anzeige auf eine feste, natürliche Ausrichtung im Querformat, wenn eine Aufgabe im Vollbildmodus angezeigt wird (auch im Letterbox-Format). | |
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION | 254631730 | Ignoriert Ausrichtungsanfragen von der App, um Endlosschleifen für die Drehung zu vermeiden. | |
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED | 273509367 | Ignoriert wiederholte Ausrichtungsanfragen, während eine Aktivität neu gestartet wird. Wenn Android erkennt, dass eine App innerhalb einer Sekunde mindestens zwei neue Ausrichtungen anfordert, betrachtet das System dies als endlosen Rotations-Loop und wendet die Override-Funktion an. | |
OVERRIDE_RESPECT_REQUESTED_ORIENTATION | 236283604 | Verhindert Letterbox-Bild, indem die Einstellung zum Ignorieren der Ausrichtungsanfrage durch den Gerätehersteller deaktiviert wird. | |
Sandbox-APIs | NEVER_SANDBOX_DISPLAY_APIS | 184838306 | Verhindert, dass das Verhalten von Display-APIs geändert wird. |
ALWAYS_SANDBOX_DISPLAY_APIS | 185004937 | Erzwingt, dass die Display APIs in der App App-Grenzen zurückgeben. Display APIs geben logische Begrenzungen des Anzeigebereichs zurück. Manchmal geht die App jedoch davon aus, dass Display APIs App-Begrenzungen zurückgeben, was zu Problemen mit der Benutzeroberfläche führt. |
|
OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS | 237531167 | Erzwingt, dass die in der App verwendeten View APIs App-Grenzen zurückgeben. View -APIs geben logische Darstellungsbereichgrenzen zurück, aber manchmal geht die App davon aus, dass View -APIs App-Grenzen zurückgeben, was zu Problemen mit der Benutzeroberfläche führt. |
|
Kamerakompatibel | OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION | 263959004 | Die erzwungene Bildschirmrotation wird deaktiviert. Standardmäßig werden alle Kamera-Apps mit fester Ausrichtung erzwungen, wenn die Kameravorschau geöffnet ist. |
OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH | 264304459 | Die standardmäßige Hartaktualisierung, die angewendet wird, wenn eine Kameravorschau erzwungen wird, wird entfernt. | |
OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE | 264301586 | Hiermit wird die harte Aktualisierung in eine weiche Aktualisierung umgewandelt, wenn eine Kameravorschau erzwungen wird. Dadurch wird der Status während der erzwungenen Drehung beibehalten. Standardmäßig führt Android eine harte Aktualisierung durch, wenn die Kameravorschau erzwungen wird. Je nachdem, wie die Apps ihren vorherigen Status im Cache gespeichert haben, kann es durch das harte Aktualisieren zu Problemen kommen, bei denen der Status der Apps verloren geht oder die Apps schwarz werden. | |
OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT | 250678880 | Beschneidet den Bildpuffer der Frontkamera auf der Vorderseite. Ist das Überschreiben deaktiviert, wird der Zuschnitt der inneren Frontkamera entfernt und das Sichtfeld der Kameravorschau wird vergrößert. Auf einigen faltbaren Geräten (siehe Referenzgeräte) wird die Kameravorschau aller Kamera-Apps standardmäßig zugeschnitten, wenn die innere Frontkamera verwendet wird. | |
Sonstiges | OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS | 263259275 | Verhindert, dass die App ausgeblendet wird, wenn sie im Splitscreen-Modus den Fokus verliert. Die App wartet auf den Fokus, bevor sie den App-Inhalt zeichnet. Dies kann dazu führen, dass die App einfriert oder geschwärzt wird. Die Überschreibung ermöglicht es Android, ein falsches Fokusereignis an die App zu senden, das der App signalisiert, wieder mit dem Zeichnen von Inhalten zu beginnen. |
FORCE_RESIZE_APP
Erzwingt, dass die Größe der Pakete, auf die die Überschreibung angewendet wird, geändert werden kann. Dadurch wird nicht geändert, ob die App in den Mehrfenstermodus versetzt werden kann. Die App kann jedoch ihre Größe anpassen, ohne in den Größenkompatibilitätsmodus zu wechseln, wenn die Bildschirmgröße angepasst wird.
Wie Apps dasselbe Ergebnis wie beim Überschreiben erzielen können
Legen Sie im App-Manifest entweder das Attribut android:resizeableActivity
auf true
fest oder setzen Sie das Metadaten-Flag android.supports_size_changes
auf true
, um die Größe ändern zu können und gleichzeitig den Modus „Mehrere Fenster“ mit android:resizeableActivity=false
zu deaktivieren.
Apps optimieren
Verwenden Sie responsive/adaptive Layouts, damit sich Apps an alle Bildschirmgrößen und Seitenverhältnisse anpassen können. Siehe Unterstützung verschiedener Bildschirmgrößen.
Überschreiben deaktivieren oder deaktivieren
Legen Sie das Attribut-Flag PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES
auf false
fest.
Property-Flags zum Anpassen der Überschreibung
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES"
android:value="true|false"/>
ADB-Befehle zum Testen der Überschreibung
So wenden Sie die Überschreibung an und machen die App veränderbar:
adb shell am compat enable FORCE_RESIZE_APP <package>
So entfernen Sie die Überschreibung:
adb shell am compat disable FORCE_RESIZE_APP <package>
Hinweis:Die Befehle werden nur vorübergehend angewendet oder entfernt.
FORCE_NON_RESIZE_APP
Erzwingt, dass die Pakete, auf die die Überschreibung angewendet wird, nicht in der Größe geändert werden kann, und wechseln bei Konfigurationsänderungen in den Größenkompatibilitätsmodus.
Wie Apps das gleiche Ergebnis wie eine Überschreibung erzielen
Lege im App-Manifest sowohl das Attribut android:resizeableActivity
als auch das Metadaten-Flag android.supports_size_changes
auf false
fest und gib entweder eine Einschränkung der Ausrichtung oder des Seitenverhältnisses an.
Apps optimieren
Bei allen Apps, die sich bei einer Größenänderung fehlerfrei verhalten, sollte entweder android:resizeableActivity
oder android.supports_size_changes
auf true
gesetzt sein.
Andere Apps sollten verbessert werden, damit sie auch bei Größenänderung gut funktionieren. Weitere Informationen finden Sie unter android:resizeableActivity.
Überschreiben deaktivieren oder deaktivieren
Legen Sie das Attribut-Flag PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES
auf false
fest.
Property-Flags zum Anpassen der Überschreibung
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES"
android:value="true|false"/>
ADB-Befehle zum Testen der Überschreibung
So wenden Sie die Überschreibung an und machen die App nicht mehr skalierbar:
adb shell am compat enable FORCE_NON_RESIZE_APP <package>
So entfernen Sie die Überschreibung:
adb shell am compat disable FORCE_NON_RESIZE_APP <package>
Hinweis:Die Befehle werden nur vorübergehend angewendet oder entfernt.
OVERRIDE_MIN_ASPECT_RATIO
Der Gatekeeper für alle Überschreibungen, die ein bestimmtes Mindestseitenverhältnis erzwingen.
Wie Apps das gleiche Ergebnis wie eine Überschreibung erzielen
Legen Sie android:minAspectRatio
auf Aktivitäts- oder App-Ebene fest.
Apps optimieren
Lege in deiner App keine Einschränkungen des Seitenverhältnisses fest. Achte darauf, dass deine App unterschiedliche Bildschirmgrößen unterstützt. Verwenden Sie Fenstergrößenklassen, um je nach verfügbarem Platz auf dem Bildschirm unterschiedliche Layouts zu unterstützen. Weitere Informationen finden Sie unter WindowSizeClass
API erstellen und WindowSizeClass
API ansehen.
Überschreibung deaktivieren
Gib eine Einschränkung für das Seitenverhältnis an oder setze das Property-Flag PROPERTY_COMPAT_ALLOW_MIN_ASPECT_RATIO_OVERRIDE
auf false
.
Property-Flags zum Anpassen der Überschreibung
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_MIN_ASPECT_RATIO_OVERRIDE"
android:value="false"/>
ADB-Befehle zum Testen der Überschreibung
So wenden Sie die Überschreibung an:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO <package>
So entfernen Sie die Überschreibung:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO <package>
Hinweis:Die Befehle werden nur vorübergehend angewendet oder entfernt.
OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY
Einschränken von App-Einstellungen, die ein bestimmtes Mindestseitenverhältnis für Aktivitäten mit ausschließlich vertikaler Ausrichtung erzwingen Diese Option ist standardmäßig aktiviert und wird nur wirksam, wenn OVERRIDE_MIN_ASPECT_RATIO
ebenfalls aktiviert ist.
Wie Apps das gleiche Ergebnis wie eine Überschreibung erzielen
Weitere Informationen finden Sie unter OVERRIDE_MIN_ASPECT_RATIO.
Apps optimieren
Weitere Informationen finden Sie unter OVERRIDE_MIN_ASPECT_RATIO.
Überschreibung deaktivieren
Weitere Informationen finden Sie unter OVERRIDE_MIN_ASPECT_RATIO.
Überschreiben von Property-Flags
Weitere Informationen finden Sie unter OVERRIDE_MIN_ASPECT_RATIO.
ADB-Befehle zum Testen der Überschreibung
So wenden Sie die Überschreibung an:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY <package>
So entfernen Sie die Überschreibung:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY <package>
Hinweis:Die Befehle werden nur vorübergehend angewendet oder entfernt.
ÜBERSCHREITUNG_MIN_ASPECT_RATIO_MITTEL
Das Mindestseitenverhältnis der Aktivität wird auf einen mittleren Wert (3:2) festgelegt.
Wie Apps das gleiche Ergebnis wie eine Überschreibung erzielen
Weitere Informationen finden Sie unter OVERRIDE_MIN_ASPECT_RATIO.
Apps optimieren
Weitere Informationen finden Sie unter OVERRIDE_MIN_ASPECT_RATIO.
Überschreibung deaktivieren
Weitere Informationen finden Sie unter OVERRIDE_MIN_ASPECT_RATIO.
Property-Flags zum Anpassen der Überschreibung
Weitere Informationen finden Sie unter OVERRIDE_MIN_ASPECT_RATIO.
ADB-Befehle zum Testen der Überschreibung
So wenden Sie die Überschreibung an:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_MEDIUM <package>
So entfernen Sie die Überschreibung:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_MEDIUM <package>
Hinweis: Mit den Befehlen wird die Überschreibung nur vorübergehend angewendet oder entfernt.
OVERRIDE_MIN_ASPECT_RATIO_LARGE
Legt das minimale Seitenverhältnis der Aktivität auf einen hohen Wert (16:9) fest
Wie Apps dasselbe Ergebnis wie beim Überschreiben erzielen können
Weitere Informationen finden Sie unter OVERRIDE_MIN_ASPECT_RATIO.
Apps optimieren
Weitere Informationen finden Sie unter OVERRIDE_MIN_ASPECT_RATIO.
Überschreiben deaktivieren oder deaktivieren
Weitere Informationen finden Sie unter OVERRIDE_MIN_ASPECT_RATIO.
Überschreiben von Property-Flags
Weitere Informationen finden Sie unter OVERRIDE_MIN_ASPECT_RATIO.
ADB-Befehle zum Testen der Überschreibung
So wenden Sie die Überschreibung an:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_LARGE <package>
So entfernen Sie die Überschreibung:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_LARGE <package>`
Hinweis:Die Befehle werden nur vorübergehend angewendet oder entfernt.
ÜBERSCHREIBEN_MIN_ASPECT_RATIO_TO_ALIGN_MIT_SPLIT_SCREEN
Ermöglicht die Verwendung des Seitenverhältnisses für Splitscreen. Ermöglicht es einer App, im Splitscreen-Modus den gesamten verfügbaren Platz zu nutzen und so Letterboxing zu vermeiden.
Wie Apps dasselbe Ergebnis wie beim Überschreiben erzielen können
Weitere Informationen finden Sie unter OVERRIDE_MIN_ASPECT_RATIO.
Apps optimieren
Weitere Informationen finden Sie unter OVERRIDE_MIN_ASPECT_RATIO.
Überschreibung deaktivieren
Weitere Informationen finden Sie unter OVERRIDE_MIN_ASPECT_RATIO.
Property-Flags zum Anpassen der Überschreibung
Weitere Informationen finden Sie unter OVERRIDE_MIN_ASPECT_RATIO.
ADB-Befehle zum Testen der Überschreibung
So wenden Sie die Überschreibung an:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN <package>
So entfernen Sie die Überschreibung:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN <package>
Hinweis:Die Befehle werden nur vorübergehend angewendet oder entfernt.
OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN
Deaktiviert die Überschreibung des Mindestseitenverhältnisses im Hochformat im Vollbildmodus, um den gesamten verfügbaren Platz auf dem Bildschirm zu nutzen.
Wie Apps das gleiche Ergebnis wie ein Überschreiben erzielen
Weitere Informationen finden Sie unter OVERRIDE_MIN_ASPECT_RATIO.
Apps optimieren
Weitere Informationen finden Sie unter OVERRIDE_MIN_ASPECT_RATIO.
Überschreibung deaktivieren
Weitere Informationen finden Sie unter OVERRIDE_MIN_ASPECT_RATIO.
Property-Flags zum Anpassen der Überschreibung
Weitere Informationen finden Sie unter OVERRIDE_MIN_ASPECT_RATIO.
ADB-Befehle zum Testen der Überschreibung
So wenden Sie die Überschreibung an:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN <package>
So entfernen Sie die Überschreibung:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN <package>
Hinweis: Mit den Befehlen wird die Überschreibung nur vorübergehend angewendet oder entfernt.
ÜBERSCHREIBUNG_ANY_ORIENTATION
Hier können Sie die folgenden Überschreibungen aktivieren, um jede Ausrichtung zu überschreiben:
- OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
- ZU_NOSENSOR_ÜBERSCHREIBEN
- OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE
Wie Apps dasselbe Ergebnis wie beim Überschreiben erzielen können
Legen Sie das Manifestattribut activity:screenOrientation
fest oder verwenden Sie die Activity#setRequestedOrientation()
API.
Apps optimieren
Ihre App sollte alle Ausrichtungen unterstützen. Eine Änderung der Ausrichtung ist eine Konfigurationsänderung, die auf zwei Arten durchgeführt werden kann: Sie lassen die Anwendung vom System löschen und neu erstellen oder Sie verwalten die Konfigurationsänderungen selbst. Wenn Sie Konfigurationsänderungen selbst verwalten, kann der App-Status mit ViewModel
beibehalten werden. In sehr begrenzten Fällen können Sie die Ausrichtung nur auf kleinen Displays sperren. Dies ist jedoch möglicherweise nicht so skalierbar wie die Möglichkeit, die App nach Bedarf zu drehen. Unter Android 12L und höher kann die feste Ausrichtung durch die Gerätekonfiguration überschrieben werden. Weitere Informationen zum Umgang mit Konfigurationsänderungen und zur Unterstützung aller Ausrichtungen finden Sie unter Konfigurationsänderungen verarbeiten, ViewModel-Übersicht und App-Ausrichtung auf Smartphones, aber nicht auf Geräten mit großem Display eingeschränkt.
Überschreiben deaktivieren oder deaktivieren
Legen Sie das Property-Flag PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE
auf false
fest.
Überschreiben von Property-Flags
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE"
android:value="true|false"/>
ADB-Befehle zum Testen der Überschreibung
So wenden Sie die Überschreibung an:
adb shell am compat enable OVERRIDE_ANY_ORIENTATION <package>
So entfernen Sie die Überschreibung:
adb shell am compat disable OVERRIDE_ANY_ORIENTATION <package>
Hinweis:Die Befehle werden nur vorübergehend angewendet oder entfernt.
OVERRIDE_ANY_ORIENTATION_TO_USER
Ermöglicht der App, den verfügbaren Anzeigebereich zu füllen. Hiermit werden alle im App-Manifest angegebenen Einschränkungen für Ausrichtung, Größe und Seitenverhältnis überschrieben. Außerdem werden alle Aufrufe von Activity#setRequestedOrientation()
ignoriert.
Wie Apps das gleiche Ergebnis wie ein Überschreiben erzielen
Legen Sie das Manifestattribut
android:screenOrientation
nicht fest oder legen Sie es auf"user"
fest.Legen Sie das Manifestattribut
android:resizeableActivity
auftrue
fest.Wenn Sie auf kleinen Bildschirmen die Größenanpassung von Anwendungen unterstützen und gleichzeitig den Mehrfenstermodus mit
android:resizeableActivity=false
deaktivieren möchten, setzen Sie das Metadaten-Flagandroid.supports_size_changes
auftrue
. Legen SieminAspectRatio
undmaxAspectRatio
nicht fest.
Apps optimieren
Deine App muss alle Ausrichtungen unterstützen. Gib im Manifest deiner App keine screenOrientation
-Spezifikation an. Unterstützen Sie die Größenänderung der App, den Multifenstermodus und alle Displayseitenverhältnisse, indem Sie das Attribut android:resizeableActivity
im Manifest Ihrer App auf true
festlegen. Weitere Informationen finden Sie unter Verschiedene Bildschirmgrößen unterstützen.
Überschreibung deaktivieren
Weitere Informationen finden Sie unter OVERRIDE_ANY_ORIENTATION
.
Property-Flags zum Anpassen der Überschreibung
Weitere Informationen finden Sie unter OVERRIDE_ANY_ORIENTATION
.
ADB-Befehle zum Testen der Überschreibung
So wenden Sie die Überschreibung an:
adb shell am compat enable OVERRIDE_ANY_ORIENTATION_TO_USER <package>
So entfernen Sie die Überschreibung:
adb shell am compat disable OVERRIDE_ANY_ORIENTATION_TO_USER <package>
Hinweis: Mit den Befehlen wird die Überschreibung nur vorübergehend angewendet oder entfernt.
OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
Aktiviert das Hochformat für alle Aktivitäten im Paket. Sofern OVERRIDE_ANY_ORIENTATION nicht aktiviert ist, wird die Überschreibung nur verwendet, wenn von der Aktivität keine andere feste Ausrichtung angegeben wurde.
Wie Apps dasselbe Ergebnis wie beim Überschreiben erzielen können
Weitere Informationen finden Sie unter OVERRIDE_ANY_ORIENTATION
.
Apps optimieren
Weitere Informationen finden Sie unter OVERRIDE_ANY_ORIENTATION
.
Überschreibung deaktivieren
Weitere Informationen finden Sie unter OVERRIDE_ANY_ORIENTATION
.
Property-Flags zum Anpassen der Überschreibung
Weitere Informationen finden Sie unter OVERRIDE_ANY_ORIENTATION
.
ADB-Befehle zum Testen der Überschreibung
So wenden Sie die Überschreibung an:
adb shell am compat enable OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT <package>
So entfernen Sie die Überschreibung:
adb shell am compat disable OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT <package>
Hinweis: Mit den Befehlen wird die Überschreibung nur vorübergehend angewendet oder entfernt.
OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR
Aktiviert die Ausrichtung nosensor für alle Aktivitäten im Paket. Sofern OVERRIDE_ANY_ORIENTATION nicht aktiviert ist, wird die Überschreibung nur verwendet, wenn von der Aktivität keine andere feste Ausrichtung angegeben wurde.
Wie Apps dasselbe Ergebnis wie beim Überschreiben erzielen können
Weitere Informationen finden Sie unter OVERRIDE_ANY_ORIENTATION
.
Apps optimieren
Weitere Informationen finden Sie unter OVERRIDE_ANY_ORIENTATION
.
Überschreibung deaktivieren
Weitere Informationen finden Sie unter OVERRIDE_ANY_ORIENTATION
.
Property-Flags zum Anpassen der Überschreibung
Weitere Informationen finden Sie unter OVERRIDE_ANY_ORIENTATION
.
ADB-Befehle zum Testen der Überschreibung
So wenden Sie die Überschreibung an:
adb shell am compat enable OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR <package>
So entfernen Sie die Überschreibung:
adb shell am compat disable OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR <package>
Hinweis: Mit den Befehlen wird die Überschreibung nur vorübergehend angewendet oder entfernt.
ÜBERSCHREIBUNG_LANDSCHAFT_ORIENTATION_ZU_REVERSE_LANDSCHAFT
Aktiviert die reverseLandscape-Ausrichtung für alle Aktivitäten im Paket. Sofern OVERRIDE_ANY_ORIENTATION nicht aktiviert ist, wird die Überschreibung nur verwendet, wenn von der Aktivität keine andere feste Ausrichtung angegeben wurde.
Wie Apps das gleiche Ergebnis wie ein Überschreiben erzielen
Weitere Informationen finden Sie unter OVERRIDE_ANY_ORIENTATION
.
Apps optimieren
Weitere Informationen finden Sie unter OVERRIDE_ANY_ORIENTATION
.
Überschreiben deaktivieren oder deaktivieren
Weitere Informationen finden Sie unter OVERRIDE_ANY_ORIENTATION
.
Überschreiben von Property-Flags
Weitere Informationen finden Sie unter OVERRIDE_ANY_ORIENTATION
.
ADB-Befehle zum Testen der Überschreibung
So wenden Sie die Überschreibung an:
adb shell am compat enable OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE <package>
So entfernen Sie die Überschreibung:
adb shell am compat disable OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE <package>
Hinweis: Mit den Befehlen wird die Überschreibung nur vorübergehend angewendet oder entfernt.
ÜBERSCHREIBUNG_NUR_FÜR_KAMERA
Die Überschreibungen OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT, OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR und OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE werden nur wirksam, wenn die Kameraverbindung aktiv ist.
Wie Apps das gleiche Ergebnis wie ein Überschreiben erzielen
Weitere Informationen finden Sie unter OVERRIDE_ANY_ORIENTATION
.
Apps optimieren
Weitere Informationen finden Sie unter OVERRIDE_ANY_ORIENTATION
.
Überschreibung deaktivieren
Weitere Informationen finden Sie unter OVERRIDE_ANY_ORIENTATION
.
Überschreiben von Property-Flags
Weitere Informationen finden Sie unter OVERRIDE_ANY_ORIENTATION
.
ADB-Befehle zum Testen der Überschreibung
So wenden Sie die Überschreibung an:
adb shell am compat enable OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA <package>
So entfernen Sie die Überschreibung:
adb shell am compat disable OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA <package>
Hinweis: Mit den Befehlen wird die Überschreibung nur vorübergehend angewendet oder entfernt.
OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION
Beschränkt die Anzeigeausrichtung auf das Querformat, wenn die folgenden Bedingungen erfüllt sind:
- Aktivität wird im Vollbildmodus angezeigt
- Eigenschaft der Komponente „Deaktivieren“
PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE
ist nicht aktiviert - Die Einstellung „Ausrichtungsanfrage ignorieren“ des Geräteherstellers ist für das Display aktiviert.
- Natürliche Ausrichtung der Anzeige im Querformat
Wie Apps das gleiche Ergebnis wie eine Überschreibung erzielen
Nicht zutreffend Das Problem sollte in der Anwendungslogik gelöst werden.
Apps optimieren
Weitere Informationen finden Sie unter OVERRIDE_ANY_ORIENTATION
.
Überschreibung deaktivieren
Legen Sie das Attribut-Flag PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE
auf false
fest.
Überschreiben von Property-Flags
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE"
android:value="true|false"/>
ADB-Befehle zum Testen der Überschreibung
So wenden Sie die Überschreibung an:
adb shell am compat enable OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION <package>
So entfernen Sie die Überschreibung:
adb shell am compat disable OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION <package>
Hinweis:Die Befehle werden nur vorübergehend angewendet oder entfernt.
ÜBERSCHREIBEN_ENABLE_KOMPAT_IGNORE_REQUESTED_ORIENTATION
Aktiviert die Kompatibilitätsrichtlinie, die das Aktualisieren der App-Ausrichtung bei einem Aufruf von Activity#setRequestedOrientation()
durch die App überspringt, wenn die App neu gestartet wird oder eine aktive Kamerakompatibilitätsbehandlung hat.
Wie Apps das gleiche Ergebnis wie ein Überschreiben erzielen
Legen Sie das Property-Flag PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION
auf true
fest.
Apps optimieren
Weitere Informationen finden Sie unter OVERRIDE_ANY_ORIENTATION
.
Überschreiben deaktivieren oder deaktivieren
Legen Sie das Attribut-Flag PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION
auf false
fest.
Property-Flags zum Anpassen der Überschreibung
<property android:name="android.window.PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION"
android:value="true|false"/>
ADB-Befehle zum Testen der Überschreibung
So wenden Sie die Überschreibung an:
adb shell am compat enable OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION <package>
So entfernen Sie die Überschreibung:
adb shell am compat disable OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION <package>
Hinweis: Mit den Befehlen wird die Überschreibung nur vorübergehend angewendet oder entfernt.
ÜBERSCHREIBUNG_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED
Aktiviert die Kompatibilitätsrichtlinie, die die angeforderte Ausrichtung einer App ignoriert, wenn die App Activity#setRequestedOrientation()
mehr als zweimal in einer Sekunde aufruft, wenn eine Aktivität nicht für die feste Ausrichtung im Letterbox-Format gekennzeichnet ist.
Wie Apps das gleiche Ergebnis wie ein Überschreiben erzielen
Nicht zutreffend Das Problem sollte in der Anwendungslogik gelöst werden.
Apps optimieren
Weitere Informationen finden Sie unter OVERRIDE_ANY_ORIENTATION
.
Überschreibung deaktivieren
Legen Sie das Attribut-Flag PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED
auf false
fest.
Property-Flags zum Anpassen der Überschreibung
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED"
android:value="false"/>
ADB-Befehle zum Testen der Überschreibung
So wenden Sie die Überschreibung an:
adb shell am compat enable OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED <package>
So entfernen Sie die Überschreibung:
adb shell am compat disable OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED <package>
Hinweis:Die Befehle werden nur vorübergehend angewendet oder entfernt.
OVERRIDE_RESPECT_REQUESTED_ORIENTATION
Pakete werden vom Verhalten bei ignorierten Anfragen zur Ausrichtung ausgeschlossen, das von Geräteherstellern für einen Anzeigebereich oder das gesamte Display aktiviert werden kann.
Wie Apps dasselbe Ergebnis wie beim Überschreiben erzielen können
Nicht zutreffend Das Problem sollte in der Anwendungslogik gelöst werden.
Apps optimieren
Weitere Informationen finden Sie unter OVERRIDE_ANY_ORIENTATION
.
Überschreiben deaktivieren oder deaktivieren
Keine Deaktivierung. Das Deaktivieren der Override-Funktion kann gefährlich sein, wenn die App nicht mit einem Gerät kompatibel ist, auf dem die Einstellung „Ablehnung von Anfragen zur Geräteausrichtung“ des Geräteherstellers aktiviert ist. Wenden Sie sich an Android Developer Relations, um die Überschreibung zu deaktivieren.
Property-Flags zum Anpassen der Überschreibung
Keine Property-Flags für diese Überschreibung.
ADB-Befehle zum Testen der Überschreibung
So wenden Sie die Überschreibung an:
adb shell am compat enable OVERRIDE_RESPECT_REQUESTED_ORIENTATION <package>
So entfernen Sie die Überschreibung:
adb shell am compat disable OVERRIDE_RESPECT_REQUESTED_ORIENTATION <package>
Hinweis:Die Befehle werden nur vorübergehend angewendet oder entfernt.
NEVER_SANDBOX_DISPLAY_APIS
Erzwingt, dass für Pakete mit Aktivitäten im Letterbox- oder Größenkompatibilitätsmodus niemals die Display
API-Sandbox angewendet wird. Die Display
APIs stellen weiterhin Begrenzungen des Anzeigebereichs bereit.
Wie Apps das gleiche Ergebnis wie ein Überschreiben erzielen
Sie können Aktivitäten angeben, deren Größe angepasst werden kann, indem Sie entweder das Manifestattribut android:resizeableActivity
auf true
oder das Metadaten-Flag android.supports_size_changes
auf true
setzen.
Apps optimieren
Bei Apps, die als vollständig skalierbar deklariert sind, dürfen die Benutzeroberflächenelemente nicht anhand der Bildschirmgröße positioniert werden. Migrieren Sie Ihre App zu aktuellen APIs, die WindowMetrics
bereitstellen. Wenn Sie Jetpack Compose verwenden, können Sie die WindowSizeClass
API nutzen, um die Benutzeroberfläche basierend auf dem Bildschirmbereich der App auf dem aktuellen Display zu zeichnen. Weitere Informationen finden Sie unter Fenstergrößenklassen verwenden.
Überschreibung deaktivieren
Keine Deaktivierung. Migrieren Sie von veralteten APIs.
Property-Flags zum Anpassen der Überschreibung
Keine Property-Flags für diese Überschreibung.
ADB-Befehle zum Testen der Überschreibung
So wenden Sie die Überschreibung an:
adb shell am compat enable NEVER_SANDBOX_DISPLAY_APIS <package>
So entfernen Sie die Überschreibung:
adb shell am compat disable NEVER_SANDBOX_DISPLAY_APIS <package>
Hinweis:Die Befehle werden nur vorübergehend angewendet oder entfernt.
ALWAYS_SANDBOX_DISPLAY_APIS
Erzwingt, dass Pakete unabhängig vom Windowing-Modus immer die API-Sandbox von Display
verwenden. Die Display
APIs geben immer die App-Begrenzungen an.
Wie Apps das gleiche Ergebnis wie ein Überschreiben erzielen
Sie können Aktivitäten als nicht veränderbar deklarieren, indem Sie entweder das Attribut android:resizeableActivity
auf false
oder das Metadaten-Flag android.supports_size_changes
auf false
festlegen.
Apps optimieren
Apps, für die angegeben wird, dass ihre Größe vollständig angepasst werden kann, sollten sich beim Positionieren von UI-Elementen niemals auf die Anzeigegröße verlassen. Migrieren Sie Ihre Anwendung von verworfenen APIs zu aktuellen APIs, die WindowMetrics
bereitstellen. Weitere Informationen finden Sie unter WindowMetricsCalculator
.
Überschreibung deaktivieren
Keine Deaktivierung. Migrieren Sie von veralteten APIs.
Property-Flags zum Anpassen der Überschreibung
Keine Property-Flags für diese Überschreibung.
ADB-Befehle zum Testen der Überschreibung
So wenden Sie die Überschreibung an:
adb shell am compat enable ALWAYS_SANDBOX_DISPLAY_APIS <package>
So entfernen Sie die Überschreibung:
adb shell am compat disable ALWAYS_SANDBOX_DISPLAY_APIS <package>
Hinweis:Die Befehle werden nur vorübergehend angewendet oder entfernt.
OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS
Erzwingt, dass Pakete für die folgenden View
APIs eine Sandbox mit Aktivitätsgrenzen ausführen:
Wie Apps das gleiche Ergebnis wie ein Überschreiben erzielen
Beheben Sie das Problem im Anwendungscode, indem Sie APIs verwenden, die die Ränder des App-Fensters und die Abweichungen relativ zum App-Fenster angeben, anstatt die Ränder des Displays und die Abweichungen relativ zum Display.
Apps optimieren
Apps sollten View
APIs verwenden und dabei die Möglichkeit berücksichtigen, dass Letterbox- und Mehrfenstermodus auf die App angewendet werden können. Weitere Informationen finden Sie unter WindowMetricsCalculator
.
Überschreibung deaktivieren
Legen Sie das Property-Flag PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS
auf false
fest.
Property-Flags zum Anpassen der Überschreibung
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS"
android:value="false"/>
ADB-Befehle zum Testen der Überschreibung
So wenden Sie die Überschreibung an:
adb shell am compat enable OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS <package>
So entfernen Sie die Überschreibung:
adb shell am compat disable OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS <package>
Hinweis:Die Befehle werden nur vorübergehend angewendet oder entfernt.
OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION
Deaktiviert die erzwungene Drehung. Verbessert die Nutzerfreundlichkeit einiger Apps.
Wie Apps das gleiche Ergebnis wie ein Überschreiben erzielen
Legen Sie das Attribut-Flag PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION
auf false
fest.
Apps optimieren
Verlassen Sie sich nicht auf die im Cache gespeicherte Ausrichtung des Kamerasensors oder auf Geräteinformationen. Informationen zur Kamerakompatibilität finden Sie unter Der Kamera-Sucher und Unterstützung für skalierbare Oberflächen in Ihrer Kamera-App.
Überschreibung deaktivieren
Legen Sie das Attribut-Flag PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION
auf true
fest.
Überschreiben von Property-Flags
<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION"
android:value="true|false"/>
ADB-Befehle zum Testen der Überschreibung
So wenden Sie die Überschreibung an, mit der die erzwungene Drehung entfernt wird:
adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>
So entfernen Sie die Überschreibung, die eine erzwungene Drehung ermöglicht:
adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>
Hinweis:Die Befehle werden nur vorübergehend angewendet oder entfernt.
ÜBERSCHREIBEN_KAMERA_KOMPAT_DEAKTIVIERT_AKTUALISIEREN
Deaktiviert die Aktualisierung der Aktivitäten nach erzwungener Drehung. Verbesserte Nutzerfreundlichkeit, wenn das Aktualisieren den Status in Apps verliert.
Wie Apps das gleiche Ergebnis wie ein Überschreiben erzielen
Legen Sie das Property-Flag PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH
auf false
fest.
Apps optimieren
Weitere Informationen finden Sie unter OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION.
Überschreiben deaktivieren oder deaktivieren
Legen Sie das Attribut-Flag PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH
auf true
fest.
Überschreiben von Property-Flags
<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH"
android:value="true|false"/>
ADB-Befehle zum Testen der Überschreibung
So wenden Sie die Überschreibung an, wodurch die Aktualisierung der Aktivitäten entfernt wird:
adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>
So entfernen Sie die Überschreibung, die das Aktualisieren von Aktivitäten ermöglicht:
adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>
Hinweis: Mit den Befehlen wird die Überschreibung nur vorübergehend angewendet oder entfernt.
ÜBERSCHREIBEN_KAMERA_KOMPAT_AKTIVIERT_ÜBERARBEITEN_VIA_PAUSE
Die Pakete, auf die es angewendet wird, führen nach einer erzwungenen Rotation aufgrund der Kamerakompatibilität eine Aktivitätsaktualisierung mit dem Zyklus onResume()
→ onPause()
→ onResume()
durch, anstatt onResume()
→ onStop()
→ onResume()
.
Wie Apps dasselbe Ergebnis wie beim Überschreiben erzielen können
Legen Sie das Property-Flag PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE
auf true
fest.
Apps optimieren
Weitere Informationen finden Sie unter OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION.
Überschreibung deaktivieren
Legen Sie das Attribut-Flag PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE
auf false
fest.
Überschreiben von Property-Flags
<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE"
android:value="true|false"/>
ADB-Befehle zum Testen der Überschreibung
So wenden Sie die Überschreibung an:
adb shell am compat enable OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE <package>
So entfernen Sie die Überschreibung:
adb shell am compat disable OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE <package>
Hinweis:Die Befehle werden nur vorübergehend angewendet oder entfernt.
ÜBERSCHREIBUNG_KAMERA_LANDSCHAFT_ZU_PORTRAIT
Erzwingt, dass die Kameraausgabe in die entgegengesetzte Ausrichtung zugeschnitten wird, wenn die Ausrichtung der Kamera im Hochformat nicht mit der natürlichen Geräteausrichtung übereinstimmt. Viele Apps kommen mit dieser Situation nicht zurecht und zeigen ansonsten gestreckte Bilder an.
Wie Apps dasselbe Ergebnis wie beim Überschreiben erzielen können
Legen Sie das Attribut-Flag PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT
auf true
fest.
Apps optimieren
Weitere Informationen finden Sie unter OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION.
Überschreiben deaktivieren oder deaktivieren
Legen Sie das Attribut-Flag PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT
auf false
fest.
Property-Flags zum Anpassen der Überschreibung
<property android:name="android.camera.PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT"
android:value="true|false"/>
ADB-Befehle zum Testen der Überschreibung
So wenden Sie die Überschreibung an, mit der das Zuschneiden der Frontkamera auf die innere Kamera angewendet wird:
adb shell am compat enable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>
So heben Sie die Überschreibung auf, mit der das Zuschneiden der Frontkamera entfernt wird:
adb shell am compat disable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>
Hinweis:Die Befehle werden nur vorübergehend angewendet oder entfernt.
OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION
Verhindert, dass Apps die App-Bildschirmfreigabe deaktivieren (siehe Medienprojektion). Wird implementiert, wenn Apps die createConfigForDefaultDisplay()
API missbrauchen, um die Aufnahme des Vollbilds zu erzwingen und die Privatsphäre der Nutzer zu gefährden, indem der Inhalt von Benachrichtigungen, die im Vollbildmodus, aber nicht bei der App-Bildschirmfreigabe erfasst werden, und alle Apps unabhängig vom Fenstermodus offengelegt werden.
Wie Apps das gleiche Ergebnis wie ein Überschreiben erzielen
Standardverhalten für die Medienprojektion zulassen (implementiert in Android 14, API-Ebene 34 mit createScreenCaptureIntent()
), sodass Nutzer unabhängig vom Fenstermodus entscheiden können, ob der Vollbildmodus oder ein einzelnes App-Fenster freigegeben werden soll. Alternativ können Sie createScreenCaptureIntent(MediaProjectionConfig)
mit einem MediaProjectionConfig
-Argument aufrufen, das von einem Aufruf von createConfigForUserChoice()
zurückgegeben wurde.
Apps optimieren
Nutzer können auswählen, ob sie während der Medienprojektion das gesamte Display des Geräts oder ein App-Fenster teilen möchten. Dies ist ab Android 14 die Standardeinstellung.
Machen Sie Ihre App größenveränderbar (resizeableActivity="true"
), um den Modus für mehrere Fenster zu unterstützen.
Überschreiben deaktivieren oder deaktivieren
Aufgrund der Schwere des Datenschutzes für Nutzer kann diese Überschreibung in Ihrer App nicht deaktiviert oder deaktiviert werden.
Überschreiben von Property-Flags
Keine.
ADB-Befehle zum Testen der Überschreibung
So wenden Sie die Überschreibung an, mit der das Deaktivieren der Teilfreigabe des Bildschirms durch die App abgebrochen wird (d. h. die Teilfreigabe aktiviert):
adb shell am compat enable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>
So entfernen Sie die Überschreibung, die es der App ermöglicht, die Teilbildschirmfreigabe zu deaktivieren:
adb shell am compat disable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>
Hinweis:Die Befehle werden nur vorübergehend angewendet oder entfernt.
OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS
Aktiviert das Senden eines gefälschten Fokus für Apps ohne Fokus im Splitscreen-Modus. Einige Spiele-Engines warten, bis sie den Fokus erhalten, bevor sie den Inhalt der App zeichnen. So wird verhindert, dass Apps dunkel bleiben, wenn sie fortgesetzt werden und noch keinen Fokus haben.
Wie Apps das gleiche Ergebnis wie ein Überschreiben erzielen
Legen Sie das Attribut-Flag PROPERTY_COMPAT_ENABLE_FAKE_FOCUS
auf true
fest.
Apps optimieren
Sie können dieses Problem vermeiden, wenn Ihre App mehrere Ausrichtungen und Konfigurationsänderungen gut handhabt. Sorgen Sie dafür, dass Ihre App für große Bildschirme geeignet ist. Folgen Sie dazu den Qualitätsrichtlinien für Apps auf großen Bildschirmen.
Wenn du die Unity-Spiel-Engine verwendest, führe ein Upgrade auf Version 2019.4.40 oder höher durch und exportiere dein Spiel noch einmal. Lass die Option Resizable Window
in den Einstellungen des Android-Players aktiviert.
Überschreiben deaktivieren oder deaktivieren
Legen Sie das Attribut-Flag PROPERTY_COMPAT_ENABLE_FAKE_FOCUS
auf false
fest.
Property-Flags zum Anpassen der Überschreibung
<property android:name="android.window.PROPERTY_COMPAT_ENABLE_FAKE_FOCUS"
android:value="true|false"/>
ADB-Befehle zum Testen der Überschreibung
So wenden Sie die Überschreibung an:
adb shell am compat enable OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS <package>
So entfernen Sie die Überschreibung:
adb shell am compat disable OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS <package>
Hinweis: Mit den Befehlen wird die Überschreibung nur vorübergehend angewendet oder entfernt.