Gerätekompatibilitätsmodus

Unter Android wird ein Kompatibilitätsmodus für Apps aktiviert, die Einschränkungen für die Ausrichtung oder die Anpassung der Größe deklarieren. Der Kompatibilitätsmodus sorgt für ein akzeptables App-Verhalten auf Geräten mit großem Display und faltbaren Smartphones, allerdings mit suboptimaler Nutzerfreundlichkeit.

App-spezifische Überschreibungen ermöglichen es Geräteherstellern, Besitzern virtueller Geräte1 und Nutzern, das Verhalten von Apps zu ändern, um das App-Layout zu verbessern oder zu verhindern, dass Apps auf bestimmten Geräten nicht mehr funktionieren.

Android 16

In Android 16 (API-Level 36) werden Einschränkungen für die Bildschirmausrichtung, das Seitenverhältnis und die Größenänderung von Apps ignoriert, um das Layout von Apps auf Formfaktoren mit einer Mindestbreite von mindestens 600 dp zu verbessern.

Die folgenden app-spezifischen Überschreibungen sind für Apps, die auf API-Level 36 ausgerichtet sind, nicht funktionsfähig:

Widerrufen

Ihre App kann auf API-Level 36 ausgerichtet sein, aber das Verhalten von Android 16 deaktivieren. In diesem Fall ist OVERRIDE_ANY_ORIENTATION_TO_USER nicht anwendbar.

Manifestattribut deklarieren

Wenn Sie das Verhalten der API-Ebene 36 deaktivieren möchten, deklarieren Sie die Manifest-Eigenschaft PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY.

Wenn Sie die Erfassung einer bestimmten Aktivität deaktivieren möchten, legen Sie die Property im Element <activity> fest:

<activity ...>
    <property
        android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY"
        android:value="true" />
    ...
</activity>

Wenn Sie die Funktion für Ihre gesamte App deaktivieren möchten, legen Sie die Eigenschaft im <application>-Element fest:

<application ...>
    <property
        android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY"
        android:value="true" />
    ...
</application>

Referenzgeräte

Bei den folgenden Geräten sind möglicherweise app-spezifische Überschreibungen erforderlich, da sie ungewöhnliche Konfigurationen haben oder Konfigurationen, die von Apps nicht gut unterstützt werden:

  • Tablets:Einige Tablets, z. B. das Pixel Tablet, sind standardmäßig im Querformat ausgerichtet. Ein Gerät befindet sich in seiner natürlichen Ausrichtung, wenn Display#getRotation() den Wert Surface.ROTATION_0 zurückgibt. Wenn Apps davon ausgehen, dass ROTATION_0 im Hochformat ist, können App-Layouts und die Kameravorschau nicht mit dem Gerätedisplay übereinstimmen.
  • Faltbare Geräte im Querformat:Einige faltbare Geräte, z. B. das Pixel Fold, sind im zusammengeklappten Zustand im Hochformat und im aufgeklappten Zustand im Querformat. Wenn Apps davon ausgehen, dass das aufgeklappte Display im Hochformat ausgerichtet ist, sind Flackerloops oder Layoutprobleme wahrscheinlich.
  • Faltbare Flip-Smartphones:Unaufgeklappte Flip-Smartphones werden in der Regel im Hochformat verwendet. Zusammengeklappt haben die Smartphones aber in der Regel ein kleines Display im Querformat. Apps müssen die verschiedenen Ausrichtungen der Displays erkennen und berücksichtigen.
  • Externe Displays:Auf ausgewählten Geräten kann eine Desktop-Fensterungssitzung auf externen, angeschlossenen Displays gestartet werden. Apps müssen externe Displays nach Informationen wie Bildschirmgröße und Auflösung abfragen. Andernfalls treffen Apps möglicherweise falsche Annahmen über die Displays, was zu einem falschen App-Verhalten führen kann.
  • Autodisplays:Viele, aber nicht alle Autodisplays sind im Querformat. Die Entwicklung von Apps für geparkte Fahrzeuge für Autodisplays ähnelt der Entwicklung für Tablets.

Häufige Kompatibilitätsprobleme

Kompatibilitätsprobleme bei Apps treten am häufigsten aufgrund von Einschränkungen bei der Ausrichtung, der Größenanpassung und dem Seitenverhältnis, einer falschen Verarbeitung der Ausrichtung der Kameravorschau und einer falschen Verwendung von APIs auf.

Letterboxing

Beim Letterboxing wird die App in der Mitte des Bildschirms oder auf großen Bildschirmen auf einer Seite positioniert, um einen einfachen Zugriff zu ermöglichen. Mattes (einfarbige Balken oder verschwommener Hintergrund) füllen den ungenutzten Displaybereich an den Seiten oder oben und unten in der App aus.

Letterboxing tritt häufig auf Geräten mit großen Bildschirmen auf, da die Abmessungen und das Seitenverhältnis des Gerätebildschirms in der Regel von denen von Standard-Smartphones abweichen, für die die meisten Apps entwickelt wurden.

Abbildung 1: Apps, die auf das Hochformat beschränkt sind, werden auf Tablets im Querformat und auf faltbaren Geräten mit Letterboxing dargestellt.

Problem

Die App unterstützt nicht alle Displaykonfigurationen, da sie eine feste Ausrichtung, ein festes Seitenverhältnis hat oder nicht in der Größe angepasst werden kann.

Zu den Konfigurationseinstellungen, mit denen die Ausrichtung und die Anpassbarkeit der Größe von Apps gesteuert werden, gehören:

  • screenOrientation: Gibt eine feste Ausrichtung für eine App an. Apps können die Ausrichtung auch zur Laufzeit mit Activity#setRequestedOrientation() festlegen.

  • resizeableActivity: Gibt an, ob das System die Größe von Apps an Fenster mit unterschiedlichen Abmessungen anpassen kann. Unter Android 11 (API‑Level 30) und niedriger wird angegeben, ob Apps den Mehrfenstermodus unterstützen. Unter Android 12 (API‑Level 31) und höher wird angegeben, ob Apps den Mehrfenstermodus auf kleinen Bildschirmen (kompakte Fenstergrößenklasse) unterstützen. Unter Android 12 und höher unterstützen Apps den Mehrfenstermodus auf großen Displays (mittlere oder erweiterte Fenstergrößenklasse) unabhängig von dieser Einstellung.

  • maxAspectRatio: Gibt das maximale von der App unterstützte Seitenverhältnis an. Nur Apps, bei denen resizeableActivity auf false festgelegt ist, können maxAspectRatio festlegen.

  • minAspectRatio: Gibt das von der App unterstützte Mindestseitenverhältnis an. Nur Apps, bei denen resizeableActivity auf false festgelegt ist, können minAspectRatio festlegen.

Optimierung

Die App muss alle Geräte- und Multi-Window-Modus-Displayausrichtungen und ‑größen unterstützen. Entfernen Sie alle Einschränkungen für die Ausrichtung und das feste Seitenverhältnis aus Ihren App-Layouts und der App-Manifestdatei.

Problemumgehung bei Kompatibilitätsproblemen

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 mit Letterboxing versehen, um die Kontinuität zu wahren.

Ab Android 12 (API-Level 31) und 12L (API-Level 32) wendet die Plattform eine Reihe von Verbesserungen auf Apps mit Letterboxing an. Gerätehersteller implementieren die Verbesserungen der Benutzeroberfläche. Sie müssen keine zusätzlichen Entwicklungsarbeiten für Ihre App durchführen, um von den Verbesserungen zu profitieren.

Mit Android 12 (API‑Level 31) werden die folgenden ästhetischen Verbesserungen eingeführt, die von Geräteherstellern konfiguriert werden können:

  • Abgerundete Ecken:Die Ecken des App-Fensters haben ein eleganteres Design.
  • Transparenz der Systemleiste:Status- und Navigationsleisten, die über der App liegen, sind halbtransparent. Dadurch sind Symbole in den Leisten immer über dem Letterbox-Hintergrund sichtbar.
  • Konfigurierbares Seitenverhältnis:Das Seitenverhältnis der App kann angepasst werden, um die Darstellung der App zu verbessern.

Abbildung 2: App mit Letterbox-Format und Verbesserungen an der Benutzeroberfläche

Mit 12L (API-Level 32) werden die folgenden funktionalen Verbesserungen eingeführt:

  • Konfigurierbare Positionierung:Auf großen Displays können Gerätehersteller die App auf der linken oder rechten Seite des Displays positionieren, um die Interaktion zu erleichtern.

  • Neu gestaltete Schaltfläche zum Neustarten:Gerätehersteller können der Schaltfläche zum Neustarten für den Größenkompatibilitätsmodus ein neues Aussehen geben, damit Nutzer sie besser erkennen.

In Android 13 (API‑Level 33) wird ein Dialogfeld für Nutzer eingeführt, in dem erklärt wird, wie die App mit Letterbox auf dem Bildschirm positioniert wird oder wie die Letterbox im Splitscreen-Modus verwendet wird:

Abbildung 3: App mit Letterbox-Format und Dialogfeld mit Nutzerinformationen.

Modus für die Größenkompatibilität

Der Größenkompatibilitätsmodus ist ein Letterbox-Modus, bei dem das Seitenverhältnis der App beibehalten wird und der eine Neustartsteuerung umfasst. Über das Steuerelement können Nutzer die App neu starten und das Display neu zeichnen lassen. Android ruft den Größenkompatibilitätsmodus für Apps auf, die nicht in der Größe angepasst werden können. Wenn eine Aktivität in einen Anzeigecontainer verschoben wird, der mit den Abmessungen der Aktivität nicht kompatibel ist, kann das System die App so skalieren, dass sie das Gerätedisplay in mindestens einer Dimension ausfüllt.

Gerätekonfigurationsänderungen, die den Größenkompatibilitätsmodus auslösen können, sind unter anderem:

  • Bildschirm drehen
  • Faltbares Gerät wird gefaltet oder entfaltet
  • Zwischen Vollbild- und Splitscreen-Anzeigemodi wechseln

Problem

Der Größenkompatibilitätsmodus wird in der Regel auf Aktivitäten angewendet, die in Bezug auf Ausrichtung oder Seitenverhältnis eingeschränkt sind und als nicht anpassbar konfiguriert (oder vom System bestimmt) sind.

Ihre App gilt als anpassbar und wird nicht in den Größenkompatibilitätsmodus versetzt, wenn sie eines der folgenden Kriterien erfüllt:

Wenn Ihre App keine der Bedingungen erfüllt, gilt sie als nicht anpassbar und wird möglicherweise in den Größenkompatibilitätsmodus versetzt.

Optimierung

Die App muss alle Displaygrößen unterstützen. Sie können die Größe Ihrer App anpassen, indem Sie das Attribut android:resizeableActivity des Elements <activity> oder <application> im App-Manifest auf true festlegen. Entwickeln Sie responsive/adaptive Layouts für Ihre App. Weitere Informationen finden Sie unter Verschiedene Displaygrößen unterstützen und Multi-Window-Modus unterstützen.

Problemumgehung bei Kompatibilitätsproblemen

Android versetzt eine App in den Größenkompatibilitätsmodus, wenn das System feststellt, dass die Darstellung der App mit Letterboxing verbessert werden kann, indem die App so skaliert wird, dass sie das Anzeigefenster in mindestens einer Dimension ausfüllt. Das System zeigt ein Steuerelement zum Neustarten an, mit dem der App-Prozess neu erstellt, die Aktivität neu erstellt und das Display neu gezeichnet wird. Weitere Informationen finden Sie unter Prozesse und Threads – Übersicht.

Anzeigekompatibilitätsmodus

Der Kompatibilitätsmodus für die Anzeige verhindert, dass eine App neu gestartet wird, wenn sie zwischen verschiedenen Displays verschoben wird. Dadurch kann eine Konfigurationsänderung wie eine Änderung des Farbmodus, der Verfügbarkeit des Touchscreens oder der Bildschirmdichte ausgelöst werden.

Der Kompatibilitätsmodus für die Anzeige ist standardmäßig für Spiele aktiviert (basierend auf dem Flag android:appCategory), um die Stabilität und Kontinuität zu verbessern. Im Gegensatz zum Größenkompatibilitätsmodus wird die Konfiguration der App im Displaykompatibilitätsmodus nicht eingefroren. Die App kann weiterhin alle Konfigurationsupdates über APIs wie den onConfigurationChanged()-Callback empfangen, wird aber nicht durch einen störenden Neustart unterbrochen. Das bedeutet, dass Spiele, die APIs wie onConfigurationChanged() richtig unterstützen, ihre Benutzeroberfläche auch dann reaktionsschnell aktualisieren können, wenn sie sich im Anzeigekompatibilitätsmodus befinden.

Wenn Sie den Anzeigekompatibilitätsmodus deaktivieren und Konfigurationsänderungen in Ihrer App verarbeiten möchten, deklarieren Sie die Unterstützung für die Konfigurationsänderungen in der Datei AndroidManifest.xml der App und verarbeiten Sie die Konfigurationsänderungen im Callback onConfigurationChanged().

<activity
    android:name=".MyGameActivity"
    android:configChanges="colorMode|touchscreen|density|...">
    ...
</activity>

Flackernde Schleifen

Wenn eine App nicht alle Ausrichtungen unterstützt, fordert sie bei einer Konfigurationsänderung möglicherweise wiederholt neue Ausrichtungen an. Dadurch entsteht eine Endlosschleife, die dazu führt, dass das Display flackert oder die App sich endlos dreht.

Problem

Unter Android 12 (API-Level 31) und höher können Gerätehersteller ihre Geräte so konfigurieren, dass von Apps angegebene Ausrichtungseinschränkungen ignoriert und stattdessen Kompatibilitätsmodi erzwungen werden. Auf einem faltbaren Gerät kann die Einstellung android:screenOrientation="portrait" einer Aktivität beispielsweise ignoriert werden, wenn die Aktivität auf dem inneren Bildschirm des Geräts im Querformat angezeigt wird.

Wenn die Ausrichtungseinschränkungen einer App ignoriert werden, kann die App ihre Ausrichtung programmatisch festlegen, indem sie Activity#setRequestedOrientation() aufruft. Der Aufruf löst einen Neustart der App aus, wenn die App keine Konfigurationsänderungen verarbeitet (siehe Konfigurationsänderungen verarbeiten). Nach dem Neustart werden die Ausrichtungseinschrä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 verstärkenden Schleife.

Eine weitere Möglichkeit, wie dieses Problem auftreten kann, ist, wenn die natürliche Ausrichtung (die übliche Ausrichtung, die von Android bestimmt wird) 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-Seitenverhältnis 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 Innendisplay prüft möglicherweise die Bildschirmdrehung, empfängt den Wert ROTATION_0, geht davon aus, dass die natürliche Ausrichtung des Geräts das Hochformat ist, und ruft setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT ) auf, um das App-Layout neu zu konfigurieren. Nachdem die App neu gestartet wurde (im Querformat), wird die Bildschirmdrehung möglicherweise noch einmal geprüft, der Wert ROTATION_0 empfangen, setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) aufgerufen und die Endlosschleife fortgesetzt.

Optimierung

Apps sollten nicht Folgendes tun:

  • Legen Sie mit Activity#setRequestedOrientation() in der Aktivitätsmethode onCreate() eine Standardausrichtung fest, da die Ausrichtungsanfrage unerwartet durch nicht verarbeitete Konfigurationsänderungen ausgelöst werden kann.
  • Annehmen, dass die natürliche Ausrichtung des Geräts (ROTATION_0) das Hochformat ist
  • Die Ausrichtung wird anhand von Signalen festgelegt, die nicht mit der aktuellen Fenstergröße zusammenhängen, z. B. Display#getRotation(), das Vorhandensein eines FoldingFeature oder eingestellte APIs.

Problemumgehung bei Kompatibilitätsproblemen

Android ignoriert Aufrufe von Activity#setRequestedOrientation() in den folgenden Situationen:

  • Die Aktivität wurde bereits durch einen vorherigen Aufruf der Methode neu gestartet oder die Behandlung zur Erzwingung der Kamerakompatibilität 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 Ausrichtungsanfragen gestellt, was auf eine Schleife hindeutet. Von den beiden Anfragen im Loop verwendet Android diejenige, mit der der Anzeigebereich der App maximiert wird.

    Gerätehersteller können dieses Verhalten auf eine App mit OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED anwenden.

  • Eigentümer virtueller Geräte haben den Methodenaufruf auf ausgewählten Geräten überschrieben.

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 (CDD) wird festgelegt, dass ein Bildsensor der Kamera „SO ausgerichtet sein MUSS, dass die lange Seite der Kamera mit der langen Seite des Displays übereinstimmt“.

Apps gehen oft davon aus, dass die Geräteausrichtung und die Ausrichtung des Kamerasensors im Hochformat sind. Das ist bei Standard-Smartphones eine vernünftige Annahme. Die natürliche Ausrichtung von Tablets und Laptops und ihren Kamerasensoren kann jedoch im Querformat sein. Außerdem können neue Formfaktoren wie faltbare Smartphones mehrere natürliche Ausrichtungen und mehrere Kamerasensoren in unterschiedlichen Ausrichtungen haben.

Wenn Sie eine Aktivität mit einer Kameraausrichtung starten, die die App nicht erwartet, oder zwischen verschiedenen Kameras oder Gerätebildschirmen (bei faltbaren Geräten) wechseln, kann dies zu einer falsch ausgerichteten oder verzerrten Kameravorschau führen.

Optimierung

Kamera-Apps müssen die Geräteausrichtung und die Ausrichtung des Kamerasensors korrekt erkennen und verwalten, um eine korrekt ausgerichtete und skalierte Kameravorschau zu präsentieren. Apps müssen die Geräte- und Sensordrehung sowie das Seitenverhältnis des Bildschirms oder Fensters berechnen und die Ergebnisse dann auf die Kameravorschau anwenden. Eine detaillierte Anleitung finden Sie unter Kameravorschau und Kamerasucher.

Problemumgehung bei Kompatibilitätsproblemen

Ein Gerät befindet sich in der natürlichen Ausrichtung, wenn Display#getRotation() den Wert Surface.ROTATION_0 zurückgibt. Das System berechnet CameraCharacteristics.SENSOR_ORIENTATION anhand der natürlichen Ausrichtung des Geräts. Unter Android wird das Hochformatfenster von Apps, die nur im Hochformat verfügbar sind, an der natürlichen Ausrichtung des Geräts ausgerichtet. Das ist die erwartete Ausrichtung für die meisten Apps. Unter Android wird das Bild des Kamerasensors auch dann zugeschnitten, wenn die Sensorausrichtung im Querformat und die Kameravorschau im Hochformat ist. Die spezifischen Problemumgehungen umfassen Folgendes:

  • Kameravorschau für Apps, die auf das Hochformat beschränkt sind, erzwingen:Apps, die auf das Hochformat beschränkt sind, erwarten, dass die natürliche Ausrichtung des Geräts und die Ausrichtung des Kamerasensors das Hochformat sind. Unter Android 12 (API-Level 31) und höher können Apps jedoch in mehreren Geräteausrichtungen ausgeführt werden, wenn Gerätehersteller die Ausrichtungsspezifikation ignorieren.

    Wenn eine App, die nur im Hochformat verwendet werden kann, mit der Kamera verbunden ist, dreht Android die App, um das App-Fenster im Hochformat an der natürlichen Ausrichtung des Geräts auszurichten.

    Auf einigen Tablets (siehe Referenzgeräte) wird das App-Hochformatfenster auf das natürliche Hochformat des Geräts ausgerichtet. Die App füllt nach der erzwungenen Drehung den gesamten Bildschirm aus.

    Auf dem inneren Display von Foldables im Querformat (siehe Referenzgeräte) werden Aktivitäten, die nur im Hochformat unterstützt werden, ins Querformat gedreht, um der natürlichen Ausrichtung im aufgeklappten Zustand zu entsprechen. Die App wird nach dem Erzwingen der Drehung letterboxed dargestellt.

  • Zuschneiden der inneren Frontkamera:Der Sensor der inneren Frontkamera einiger faltbarer Smartphones ist im Querformat ausgerichtet. Neben der erzwungenen Drehung der Kameravorschau auf dem faltbaren Innendisplay schneidet Android das Sichtfeld der inneren Frontkamera (Querformat) so zu, dass der Sensor eine Ansicht aufnimmt, die der Ausrichtung des Geräts entgegengesetzt ist.

  • Kameravorschaubilder aktualisieren: Das System durchläuft die Aktivitätsmethoden onStop() und onStart() (Standard) oder onPause() und onResume() (angewendet durch die App-spezifische Überschreibung OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE) nach der erzwungenen Drehung, um sicherzustellen, dass die Kameravorschau richtig angezeigt wird.

  • Skalierung des Seitenverhältnisses:Das System ändert das Seitenverhältnis der zwangsweise gedrehten Kameravorschau dynamisch in ein höheres Mindestseitenverhältnis, um sicherzustellen, dass die Kameravorschau richtig skaliert wird.

App-Entwickler können diese Workarounds überschreiben, wenn die Apps die Kameravorschau korrekt verarbeiten. Weitere Informationen finden Sie unter Überschreibungen pro App.

Häufig missbrauchte APIs

Da Android Unterstützung für Funktionen wie den Mehrfenstermodus und Geräte wie Falt-Smartphones hinzugefügt hat, wurden Legacy-APIs eingestellt und durch aktuelle APIs ersetzt, die für alle Displaygrößen und Geräteformfaktoren funktionieren. Die eingestellten APIs sind jedoch weiterhin zur Abwärtskompatibilität verfügbar.

Einige View-APIs sind für spezielle Zwecke konzipiert, die Entwickler nicht immer gut verstehen.

Problem

Entwickler verwenden weiterhin die verworfenen Display-APIs und gehen fälschlicherweise davon aus, dass die APIs die App-Grenzen anstelle der Grenzen des Geräteanzeigebereichs zurückgeben. Oder Entwickler verwenden fälschlicherweise spezielle View-APIs, um allgemeine Display-Messwerte abzurufen. Das führt zu Fehlberechnungen beim Neupositionieren von UI-Elementen nach dem Ändern der Größe des App-Fensters, was zu Layoutproblemen führt.

Eingestellte und häufig missbräuchlich verwendete Display-APIs:

Weitere Informationen finden Sie unter Unterstützung des Mehrfenstermodus.

Missbrauch von View APIs:

Optimierung

Verlassen Sie sich bei der Positionierung von UI-Elementen niemals auf die physische Displaygröße. Migrieren Sie Ihre App zu APIs, die auf WindowMetrics basieren, einschließlich der folgenden WindowManager APIs:

Problemumgehung bei Kompatibilitätsproblemen

Zwei Überschreibungen passen die eingestellten Display-APIs und die missbräuchlich verwendeten View-APIs an, um die App-Grenzen zurückzugeben: ALWAYS_SANDBOX_DISPLAY_APIS für Display-APIs; OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS für View-APIs. ALWAYS_SANDBOX_DISPLAY_APIS wird standardmäßig auch auf Apps angewendet, die für den Größenkompatibilitätsmodus infrage kommen.

Transparente Aktivitäten

Transparente Aktivitäten sind das Ergebnis von transparenten Hintergrundstilen, z. B.:

<style name="Transparent" parent="AppTheme">
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
</style>

Themen im Zusammenhang mit Dialogfeldern, z. B. Theme.MaterialComponents.Dialog, können Stile enthalten, die Aktivitäten transparent machen.

Transparente Aktivitäten decken nicht den gesamten verfügbaren Displaybereich ab. Das macht die Verwaltung schwierig, da sich der verfügbare Displaybereich je nach Konfigurationsänderungen wie Drehen, Ein- und Ausklappen des Geräts und Mehrfenstermodus ändern kann.

Problem

Eine transparente Aktivität sollte den Grenzen der ersten undurchsichtigen Aktivität unter der transparenten Aktivität im Aktivitätsstapel der Aufgabe entsprechen. Eine undurchsichtige Aktivität, die ein Berechtigungsdialogfeld startet, kann jedoch ein Trampolin sein (eine Aktivität, die eine andere Aktivität startet und dann verschwindet). Das System kann daher die Grenzen der Trampolinaktivität, die die transparente Berechtigungsdialogfeldaktivität gestartet hat, nicht bestimmen.

Optimierung

Transparente Aktivitäten übernehmen ihre Einschränkungen von der obersten undurchsichtigen Aktivität darunter im Aktivitätsstapel einer Aufgabe. Die undurchsichtige Aktivität muss während des gesamten Lebenszyklus der transparenten Aktivität verfügbar sein, von der Erstellung bis zur Beendigung. Starten Sie daher keine Berechtigungsanfragen über Trampolin-Aktivitäten.

Wenn eine Trampolin-Aktivität eine Berechtigungsanfrage startet, sieht der Nutzer das Berechtigungsdialogfeld möglicherweise nicht, da die Trampolin-Aktivität zerstört wurde, bevor der Nutzer auf das Dialogfeld reagieren konnte. Außerdem wurden die Abmessungen und die Position der Dialogfeldaktivität möglicherweise falsch berechnet.

Apps sollten Berechtigungsanfragen immer über Aktivitäten starten, die sichtbar bleiben, bis der Nutzer eine Entscheidung zu Berechtigungen getroffen hat.

Abgerundete Ecken

Eine Aktivität kann transparent sein, weil in einem Stil die Hintergrundtransparenz festgelegt ist oder weil die Inhalte der Aktivität den verfügbaren Anzeigebereich nicht ausfüllen. Wenn eine transparente Aktivität den verfügbaren Displaybereich ausfüllt, wendet das System automatisch abgerundete Ecken auf die Aktivität an, wenn der Gerätehersteller dies konfiguriert hat. Wenn eine transparente Aktivität (z. B. ein Berechtigungsdialogfeld) den verfügbaren Platz jedoch nicht ausfüllt, liegt es an Ihnen, ob Sie abgerundete Ecken verwenden möchten.

Berechtigungsdialogfelder füllen den verfügbaren Anzeigebereich nicht aus, da im Dialogfeldlayout in der Regel LayoutParams.WRAP_CONTENT anstelle von LayoutParams.MATCH_PARENT verwendet wird.

Problemumgehung bei Kompatibilitätsproblemen

Aktivitäten, die Dialogaktivitäten starten, bleiben sichtbar, bis der Nutzer auf den Dialog geantwortet hat.

Das System sorgt dafür, dass eine transparente Aktivität alle Einschränkungen der ersten undurchsichtigen Aktivität unter der transparenten Aktivität im Aktivitätsstapel erbt, einschließlich Einschränkungen in Bezug auf:

  • Modus für die Größenkompatibilität
  • Ausrichtung
  • Seitenverhältnis

Unity-Spiele

Unity-Spiele werden auf Android im Vollbildmodus oder im Mehrfenstermodus ausgeführt. Bei vielen Unity-Spielen geht jedoch der Fokus verloren und es werden keine Inhalte mehr gerendert, wenn die App im Mehrfenstermodus ausgeführt wird.

Problem

Unity hat in Unity 2019.4 die Option Resizable Window hinzugefügt, um den Multi-Window-Modus unter Android zu unterstützen. Die ursprüngliche Implementierung hat jedoch nicht korrekt auf den Aktivitätslebenszyklus im Mehrfenstermodus reagiert, was dazu führte, dass die Wiedergabe in UnityPlayer unterbrochen wurde, wenn die App den Fokus verlor. Auf dem Player wurde ein schwarzer Bildschirm oder der letzte, eingefrorene Frame des Spiels gerendert. Das Spiel wurde erst fortgesetzt, als der Nutzer auf den Bildschirm getippt hat. Viele Apps, die die Unity-Engine verwenden, haben dieses Problem und werden im Multi-Window-Modus als schwarzes Fenster dargestellt.

Optimierung

Aktualisieren Sie Unity auf Version 2019.4.40 oder höher und exportieren Sie Ihr Spiel noch einmal. Lassen Sie die Option Resizable Window in den Android Player-Einstellungen aktiviert. Andernfalls wird das Spiel pausiert, wenn es nicht im Fokus ist, obwohl es im Multi-Window-Modus vollständig sichtbar ist.

Problemumgehung bei Kompatibilitätsproblemen

Gerätehersteller können die OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS-Überschreibung pro App anwenden, um einer App im Mehrfenstermodus ein gefälschtes Fokusereignis bereitzustellen. Durch die Überschreibung kann die Aktivität Inhalte neu zeichnen und wird nicht geschwärzt.

Desktop-Freiform-Fenster

Wenn Apps in einer Desktop-Fensterumgebung ausgeführt werden, können zusätzliche Kompatibilitätsmodi auftreten.

Apps mit gesperrter Ausrichtung können frei in der Größe angepasst werden. Auch wenn eine Aktivität auf das Hochformat beschränkt ist, können Nutzer die Größe der App ins Querformat ändern.

Animation einer Porträt-App, die auf das Querformat angepasst wird.

Wenn eine Aktivität jedoch als nicht anpassbar deklariert wird (resizeableActivity = false), wird die Benutzeroberfläche der Aktivität skaliert, wobei das Seitenverhältnis beibehalten wird.

Animation, wie die Größe einer App geändert wird. Die Benutzeroberfläche wird so skaliert, dass sie das Desktopfenster ausfüllt.

Kameravorschau in Desktop-Fenstern

Wenn Apps im Desktop-Fenstermodus eine Kameravorschau starten, wird die Benutzeroberfläche des Suchers skaliert, wobei das ursprüngliche Seitenverhältnis beibehalten wird. Die Größe des restlichen App-Fensters kann frei angepasst werden.

App auf Kompatibilitätsprobleme testen

Mit den folgenden Ressourcen können Sie Ihre App testen und herausfinden, wie sie sich auf verschiedenen Formfaktoren verhält:

Ist ein Letterbox-Bild

Prüfen Sie, ob für jede Aktivität der gesamte für die App verfügbare Bildschirmbereich genutzt werden kann. Deklarieren Sie zuerst den folgenden Code in Ihrem Testordner:

Kotlin

fun isLetterboxed(activity: AppCompatActivity): 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(AppCompatActivity 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 sicherzustellen, dass die Zielaktivität nicht letterboxed ist:

Kotlin

@get:Rule
val activityRule = ActivityScenarioRule(MainActivity::class.java)

@Test
fun activity_launched_notLetterBoxed() {
    activityRule.scenario.onActivity {
        assertFalse(it.isLetterboxed())
    }
}

Java

@Rule
public ActivityScenarioRule<MainActivity> rule = new ActivityScenarioRule<>(MainActivity.class);

@Test
public void activity_launched_notLetterBoxed() {
    try (ActivityScenario<MainActivity> scenario =
        ActivityScenario.launch(MainActivity.class)) {
            scenario.onActivity( activity -> {
                assertFalse(activity.isLetterboxed());
            });
        }
}

Idealerweise führen Sie diesen Test nur so lange aus, bis er bestanden ist und bestätigt, dass die Aktivitäten Ihrer App den gesamten für die App verfügbaren Anzeigebereich einnehmen. Testen Sie Ihre App auf allen Gerätetypen, um ein einheitliches Verhalten zu gewährleisten.

App-spezifische Überschreibungen

Android bietet Überschreibungen, mit denen das konfigurierte Verhalten von Apps geändert werden kann. Mit dem Override FORCE_RESIZE_APP wird das System beispielsweise angewiesen, den Größenkompatibilitätsmodus zu umgehen und die Größe der App an die Abmessungen des Displays anzupassen, auch wenn resizeableActivity="false" im App-Manifest angegeben ist.

Gerätehersteller wenden Überschreibungen auf ausgewählte 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 Überschreibungen für Apps über die Geräteeinstellungen anwenden. Auf Android 16 (API-Level 36) und höher wenden Besitzer virtueller Geräte Überschreibungen auf ausgewählte Geräte an, die sie verwalten.

Überschreibungen durch Nutzer pro App

Unter Android 14 und höher können Nutzer über ein Einstellungsmenü das Seitenverhältnis von Apps ändern. Auf Geräten mit großem Display wie den Referenzgeräten ist das Menü verfügbar.

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 Wert fest, der vom Gerätehersteller konfiguriert wurde. Nutzer können das Seitenverhältnis auch auf den App-Standard zurücksetzen, der 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 Überschreibung der Kompatibilität des Seitenverhältnisses für Nutzer deaktivieren möchten, fügen Sie dem App-Manifest das Attribut 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 Überschreibung der Kompatibilität des Nutzer-Seitenverhältnisses im Vollbildmodus 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 Optionen für das Seitenverhältnis in den Geräteeinstellungen entfernt. Nutzer können die Vollbildüberschreibung nicht auf Ihre App anwenden.

    Wenn Sie diese Eigenschaft auf true festlegen, hat das keine Auswirkungen.

App für alle Bildschirme optimieren:Legen Sie in Ihrer App keine Einschränkungen für das Seitenverhältnis fest. Verwenden Sie Fenstergrößenklassen, um verschiedene Layouts basierend auf dem verfügbaren Displayplatz zu unterstützen.

App-spezifische Überschreibungen für Geräte

Gerätehersteller und Inhaber virtueller Geräte (ausgewählte vertrauenswürdige und privilegierte Apps) wenden Überschreibungen auf App-Basis auf bestimmten Geräten an, darunter Tablets, faltbare Geräte, ChromeOS-Geräte und Autodisplays. Auf den Referenzgeräten werden einige der Überschreibungen möglicherweise standardmäßig auf eine Vielzahl von Apps angewendet.

Apps können die meisten Überschreibungen deaktivieren (siehe Tabelle Überschreibungen pro App unten).

Sie können Ihre App mit aktivierten oder deaktivierten Überschreibungen mithilfe des Kompatibilitätsframeworks testen (siehe Tools für das Kompatibilitätsframework). 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 zu ermitteln, 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 sowie Anleitungen zur Optimierung Ihrer App aufgeführt, damit sie nicht auf Überschreibungen angewiesen ist. Sie können Ihrem App-Manifest Property-Flags hinzufügen, um einige Überschreibungen zu deaktivieren.

App-spezifische Überschreibungen
Eingeben Name ID Beschreibung
Größenänderung FORCE_RESIZE_APP 174042936 Umgeht den Größenkompatibilitätsmodus für die App bei Konfigurationsänderungen.
FORCE_NON_RESIZE_APP 181136395 Erzwingt bei Konfigurationsänderungen den Kompatibilitätsmodus für die Größe für die App.
Seitenverhältnis OVERRIDE_MIN_ASPECT_RATIO 174042980 Gatekeeper-Überschreibung, die aktiviert werden muss, damit andere Überschreibungen des Seitenverhältnisses angewendet werden können.
OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY 203647190 Wenn aktiviert (Standardeinstellung), werden durch Limits Aktivitäten überschrieben, die nur auf Porträts beschränkt sind.
OVERRIDE_MIN_ASPECT_RATIO_SMALL 349045028 Ändert das Mindestseitenverhältnis in 4:3.
OVERRIDE_MIN_ASPECT_RATIO_MEDIUM 180326845 Ändert das minimale Seitenverhä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 Ändert das Mindestseitenverhältnis so, dass es 50% der Displaygröße (oder des Seitenverhältnisses im Split-Screen-Modus) entspricht.
OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN 218959984 Deaktiviert die Überschreibung des Mindestseitenverhältnisses, sodass Apps im Hochformat des Geräts im Vollbildmodus angezeigt werden.
Ausrichtung OVERRIDE_ANY_ORIENTATION 265464455 Ermöglicht das Überschreiben einer beliebigen Ausrichtung.
OVERRIDE_ANY_ORIENTATION_TO_USER 310816437 Überschreibt Einschränkungen für Ausrichtung, Größenänderung und Seitenverhältnis.
OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT 265452344 Überschreibt die Ausrichtung in das Hochformat, wenn für eine Aktivität keine Ausrichtung definiert ist.
OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR 265451093 Überschreibt die Ausrichtung mit nosensor (natürliche Ausrichtung des Geräts verwenden), wenn für eine Aktivität keine Ausrichtung definiert ist.
OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE 266124927 Dreht Apps, die nur im Querformat angezeigt werden, um 180 Grad.
OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA 265456536 Beschränkt den Bereich der Überschreibung der Ausrichtung auf den Zeitraum, in dem die App mit der Kamera verbunden ist.
OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION 255940284 Legt die Anzeige auf die natürliche Ausrichtung im Querformat fest, wenn eine Aufgabe im Vollbildmodus angezeigt wird (auch wenn sie im Letterbox-Format dargestellt wird).
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION 254631730 Ignoriert Ausrichtungsanfragen von der App, um Endlosschleifen bei der Drehung zu vermeiden.
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED 273509367 Wiederholte Ausrichtungsanfragen werden ignoriert, 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 Endlosschleife für die Drehung und wendet die Überschreibung an.
OVERRIDE_RESPECT_REQUESTED_ORIENTATION 236283604 Verhindert Letterboxing, indem die Einstellung „Orientierungsanfrage des Geräteherstellers ignorieren“ deaktiviert wird.
Sandbox-APIs NEVER_SANDBOX_DISPLAY_APIS 184838306 Verhindert, dass sich das Verhalten von Display-APIs ändert.
ALWAYS_SANDBOX_DISPLAY_APIS 185004937 Erzwingt, dass die Display-APIs in der App App-Grenzen zurückgeben. Display-APIs geben logische Grenzen für den Anzeigebereich zurück. Manchmal geht die App jedoch davon aus, dass Display-APIs App-Grenzen 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 Grenzen für den Anzeigebereich zurück. Manchmal geht die App jedoch davon aus, dass View-APIs App-Grenzen zurückgeben, was zu Problemen mit der Benutzeroberfläche führt.
Kamerakompatibilität OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION 263959004 Deaktiviert die erzwungene Rotation. Standardmäßig werden alle Kamera-Apps mit fester Ausrichtung zwangsweise gedreht, wenn die Kameravorschau geöffnet ist.
OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH 264304459 Entfernt das standardmäßige Hard-Refresh, das angewendet wird, wenn eine Kameravorschau erzwungen rotiert wird.
OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE 264301586 Wechselt das Hard Refresh zu einem Soft Refresh, wenn eine Kameravorschau zwangsweise gedreht wird. Dadurch wird der Status während der Drehung beibehalten. Standardmäßig wird in Android eine Aktualisierung erzwungen, wenn die Kamera-Vorschau zwangsweise gedreht wird. Das vollständige Aktualisieren kann zu Problemen führen, da Apps je nachdem, wie sie ihren vorherigen Status zwischengespeichert haben, ihren Status verlieren oder schwarz werden.
OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT 250678880 Beschneidet den Bildpuffer der inneren Frontkamera. Wenn die Überschreibung deaktiviert ist, 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 vom System zugeschnitten, wenn die innere Frontkamera verwendet wird.
Sonstiges OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS 263259275 Verhindert, dass die App schwarz dargestellt wird, wenn sie im Splitscreen-Modus den Fokus verliert. Die App wartet auf den Fokus, bevor sie den App-Inhalt rendert. Das kann dazu führen, dass die App einfriert oder schwarz dargestellt wird. Durch die Überschreibung kann Android ein gefälschtes Fokusereignis an die App senden, das der App signalisiert, dass sie wieder mit dem Rendern von Inhalten beginnen soll.

FORCE_RESIZE_APP

Erzwingt, dass die Pakete, auf die die Überschreibung angewendet wird, eine anpassbare Größe haben und in den Mehrfenstermodus wechseln können. Gilt für alle Displaygrößen.

Wie Apps dasselbe Ergebnis wie beim Überschreiben erzielen können

Legen Sie im App-Manifest das Attribut android:resizeableActivity auf true fest.

Apps optimieren

Verwenden Sie responsive/adaptive Layouts, damit sich Apps an alle Displaygrößen und Seitenverhältnisse anpassen. Weitere Informationen finden Sie unter Verschiedene Displaygrößen unterstützen.

Überschreiben deaktivieren oder deaktivieren

Legen Sie das Property-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 des Überschreibens

So wenden Sie die Überschreibung an und machen die App anpassbar:

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 wenden die Überschreibung nur vorübergehend an oder entfernen sie.

FORCE_NON_RESIZE_APP

Erzwingt, dass die Pakete, auf die die Überschreibung angewendet wird, nicht in der Größe angepasst werden können und bei Konfigurationsänderungen in den Größenkompatibilitätsmodus wechseln. Gilt für alle Displaygrößen.

Wie Apps dasselbe Ergebnis wie beim Überschreiben erzielen können

Setzen Sie sowohl das Attribut android:resizeableActivity als auch das Metadaten-Flag android.supports_size_changes im App-Manifest auf false und deklarieren Sie entweder eine Einschränkung für die Ausrichtung oder das Seitenverhältnis.

Apps optimieren

Bei allen Apps, die sich bei einer Größenänderung gut verhalten, sollte entweder android:resizeableActivity oder android.supports_size_changes auf true gesetzt sein. Andere Apps sollten so verbessert werden, dass sie sich beim Ändern der Größe gut verhalten. Weitere Informationen finden Sie unter android:resizeableActivity.

Überschreiben deaktivieren oder deaktivieren

Legen Sie das Property-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 des Überschreibens

So wenden Sie die Überschreibung an und machen die App nicht anpassbar:

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 wenden die Überschreibung nur vorübergehend an oder entfernen sie.

OVERRIDE_MIN_ASPECT_RATIO

Der Gatekeeper für alle Überschreibungen, die ein bestimmtes Mindestseitenverhältnis erzwingen.

Wie Apps dasselbe Ergebnis wie beim Überschreiben erzielen können

Legen Sie android:minAspectRatio auf Aktivitäts- oder App-Ebene fest.

Apps optimieren

Lege in deiner App keine Einschränkungen für das Seitenverhältnis fest. Achte darauf, dass deine App verschiedene Displaygrößen unterstützt. Verwenden Sie Fenstergrößenklassen, um verschiedene Layouts basierend auf dem verfügbaren Platz auf dem Bildschirm zu unterstützen. Weitere Informationen finden Sie unter Compose WindowSizeClass API und View WindowSizeClass API.

Überschreiben deaktivieren oder deaktivieren

Geben Sie eine Einschränkung für das Seitenverhältnis an oder legen Sie das Property-Flag PROPERTY_COMPAT_ALLOW_MIN_ASPECT_RATIO_OVERRIDE auf false fest.

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 des Überschreibens

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 wenden die Überschreibung nur vorübergehend an oder entfernen sie.

OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY

Beschränkt App-Einstellungen, die ein bestimmtes Mindestseitenverhältnis für Aktivitäten mit Ausrichtung nur im Hochformat erzwingen. Standardmäßig aktiviert und wird nur wirksam, wenn auch OVERRIDE_MIN_ASPECT_RATIO aktiviert ist.

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.

Property-Flags zum Anpassen der Überschreibung

Weitere Informationen finden Sie unter OVERRIDE_MIN_ASPECT_RATIO.

adb-Befehle zum Testen des Überschreibens

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 wenden die Überschreibung nur vorübergehend an oder entfernen sie.

OVERRIDE_MIN_ASPECT_RATIO_SMALL

Legt das minimale Seitenverhältnis der Aktivität auf einen kleinen Wert (4:3) 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.

Property-Flags zum Anpassen der Überschreibung

Weitere Informationen finden Sie unter OVERRIDE_MIN_ASPECT_RATIO.

adb-Befehle zum Testen des Überschreibens

So wenden Sie die Überschreibung an:

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_SMALL <package>

So entfernen Sie die Überschreibung:

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_SMALL <package>

Hinweis:Die Befehle wenden die Überschreibung nur vorübergehend an oder entfernen sie.

OVERRIDE_MIN_ASPECT_RATIO_MEDIUM

Legt das Mindestseitenverhältnis der Aktivität auf einen mittleren Wert (3:2) 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.

Property-Flags zum Anpassen der Überschreibung

Weitere Informationen finden Sie unter OVERRIDE_MIN_ASPECT_RATIO.

adb-Befehle zum Testen des Überschreibens

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:Die Befehle wenden die Überschreibung nur vorübergehend an oder entfernen sie.

OVERRIDE_MIN_ASPECT_RATIO_LARGE

Legt das Mindestseitenverhältnis der Aktivität auf einen großen 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.

Property-Flags zum Anpassen der Überschreibung

Weitere Informationen finden Sie unter OVERRIDE_MIN_ASPECT_RATIO.

adb-Befehle zum Testen des Überschreibens

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 wenden die Überschreibung nur vorübergehend an oder entfernen sie.

OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN

Ermöglicht die Verwendung des Splitscreen-Seitenverhältnisses. Ermöglicht einer App, den gesamten verfügbaren Platz im Splitscreen-Modus zu nutzen, sodass keine Letterbox-Darstellung erfolgt.

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.

Property-Flags zum Anpassen der Überschreibung

Weitere Informationen finden Sie unter OVERRIDE_MIN_ASPECT_RATIO.

adb-Befehle zum Testen des Überschreibens

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 wenden die Überschreibung nur vorübergehend an oder entfernen sie.

OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN

Deaktiviert die Überschreibung des Mindestseitenverhältnisses im Vollbildmodus im Hochformat, um den gesamten verfügbaren Bildschirmplatz zu nutzen.

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.

Property-Flags zum Anpassen der Überschreibung

Weitere Informationen finden Sie unter OVERRIDE_MIN_ASPECT_RATIO.

adb-Befehle zum Testen des Überschreibens

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:Die Befehle wenden die Überschreibung nur vorübergehend an oder entfernen sie.

OVERRIDE_ANY_ORIENTATION

Ermöglicht, dass die folgenden Überschreibungen jede Ausrichtung überschreiben:

Wie Apps dasselbe Ergebnis wie beim Überschreiben erzielen können

Legen Sie das Manifestattribut activity:screenOrientation fest oder verwenden Sie die API Activity#setRequestedOrientation().

Apps optimieren

Ihre App sollte alle Ausrichtungen unterstützen. Eine Änderung der Ausrichtung ist eine Konfigurationsänderung, die auf zwei Arten behandelt werden kann: entweder das System zerstört und erstellt die App neu oder Sie verwalten die Konfigurationsänderungen selbst. Wenn Sie Konfigurationsänderungen selbst verwalten, kann der App-Status mit ViewModel beibehalten werden. In sehr wenigen Fällen können Sie die Ausrichtung nur auf kleinen Displays sperren. Dies ist jedoch möglicherweise nicht so gut skalierbar wie die Möglichkeit, dass Nutzer die App nach Bedarf drehen können. Unter Android 12L und höher kann die feste Ausrichtung durch die Gerätekonfiguration überschrieben werden. Weitere Informationen zum Verarbeiten von Konfigurationsänderungen und zum Unterstützen 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.

Property-Flags zum Anpassen der Überschreibung

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE"
  android:value="true|false"/>

adb-Befehle zum Testen des Überschreibens

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 wenden die Überschreibung nur vorübergehend an oder entfernen sie.

OVERRIDE_ANY_ORIENTATION_TO_USER

Ermöglicht der App, den verfügbaren Displaybereich auszufüllen. Überschreibt alle im App-Manifest angegebenen Einschränkungen für Ausrichtung, Größenänderung und Seitenverhältnis. Außerdem werden alle Aufrufe von Activity#setRequestedOrientation() oder Activity#getRequestedOrientation() ignoriert.

Wie Apps dasselbe Ergebnis wie beim Überschreiben erzielen können

  • Legen Sie das Manifestattribut android:screenOrientation nicht fest oder legen Sie das Attribut auf "user" fest.

  • Legen Sie das Manifestattribut android:resizeableActivity auf true fest.

  • Wenn Sie auf kleinen Bildschirmen die Größenanpassung von Apps unterstützen und gleichzeitig den Multi-Window-Modus mit android:resizeableActivity=false deaktivieren möchten, setzen Sie das Metadaten-Flag android.supports_size_changes auf true. Legen Sie minAspectRatio und maxAspectRatio nicht fest.

Apps optimieren

Sorgen Sie dafür, dass Ihre App alle Ausrichtungen unterstützt. Legen Sie keine screenOrientation-Spezifikation im Manifest Ihrer App fest. Unterstützen Sie die Größenänderung von Apps, den Mehrfenstermodus und alle Display-Seitenverhältnisse, indem Sie das Attribut android:resizeableActivity im Manifest Ihrer App auf true festlegen. Weitere Informationen finden Sie unter Verschiedene Displaygrößen unterstützen.

Überschreiben deaktivieren oder 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 des Überschreibens

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:Die Befehle wenden die Überschreibung nur vorübergehend an oder entfernen sie.

OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT

Aktiviert die Hochformat-Ausrichtung für alle Aktivitäten im Paket. Sofern OVERRIDE_ANY_ORIENTATION nicht aktiviert ist, wird die Überschreibung nur verwendet, wenn keine andere feste Ausrichtung von der Aktivität 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.

Überschreiben deaktivieren oder 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 des Überschreibens

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:Die Befehle wenden die Überschreibung nur vorübergehend an oder entfernen sie.

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 keine andere feste Ausrichtung für die Aktivität 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.

Überschreiben deaktivieren oder 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 des Überschreibens

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:Die Befehle wenden die Überschreibung nur vorübergehend an oder entfernen sie.

OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE

Aktiviert die Ausrichtung reverseLandscape für alle Aktivitäten im Paket. Sofern OVERRIDE_ANY_ORIENTATION nicht aktiviert ist, wird die Überschreibung nur verwendet, wenn keine andere feste Ausrichtung für die Aktivität 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.

Überschreiben deaktivieren oder 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 des Überschreibens

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:Die Befehle wenden die Überschreibung nur vorübergehend an oder entfernen sie.

OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA

Grenzwerte 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 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.

Überschreiben deaktivieren oder 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 des Überschreibens

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:Die Befehle wenden die Überschreibung nur vorübergehend an oder entfernen sie.

OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION

Beschränkt die Ausrichtung auf das natürliche Querformat, wenn die folgenden Bedingungen erfüllt sind:

  • Aktivität im Vollbildmodus
  • Die Komponenteneigenschaft „Opt-out“ PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE ist nicht aktiviert
  • Die Einstellung „Ausrichtungswünsche des Geräteherstellers ignorieren“ ist für das Display aktiviert.
  • Die natürliche Ausrichtung des Displays ist das Querformat.

Wie Apps dasselbe Ergebnis wie beim Überschreiben erzielen können

Nicht zutreffend Das Problem sollte in der Anwendungslogik behoben werden.

Apps optimieren

Weitere Informationen finden Sie unter OVERRIDE_ANY_ORIENTATION.

Überschreiben deaktivieren oder deaktivieren

Legen Sie das Property-Flag PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE auf false fest.

Property-Flags zum Anpassen der Überschreibung

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE"
  android:value="true|false"/>

adb-Befehle zum Testen des Überschreibens

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 wenden die Überschreibung nur vorübergehend an oder entfernen sie.

OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION

Aktiviert eine Kompatibilitätsrichtlinie, die das Aktualisieren der Ausrichtung der App überspringt, wenn die App Activity#setRequestedOrientation() aufruft, während die App neu gestartet wird oder eine aktive Kamera-Kompatibilitätsbehandlung hat.

Wie Apps dasselbe Ergebnis wie beim Überschreiben erzielen können

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 Property-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 des Überschreibens

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:Die Befehle wenden die Überschreibung nur vorübergehend an oder entfernen sie.

OVERRIDE_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 pro Sekunde aufruft und eine Aktivität nicht für eine feste Ausrichtung letterboxed ist.

Wie Apps dasselbe Ergebnis wie beim Überschreiben erzielen können

Nicht zutreffend Das Problem sollte in der Anwendungslogik behoben werden.

Apps optimieren

Weitere Informationen finden Sie unter OVERRIDE_ANY_ORIENTATION.

Überschreiben deaktivieren oder deaktivieren

Legen Sie das Property-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 des Überschreibens

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 wenden die Überschreibung nur vorübergehend an oder entfernen sie.

OVERRIDE_RESPECT_REQUESTED_ORIENTATION

Schließt Pakete vom Verhalten der Anfrage zum Ignorieren der Ausrichtung aus, 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 behoben werden.

Apps optimieren

Weitere Informationen finden Sie unter OVERRIDE_ANY_ORIENTATION.

Überschreiben deaktivieren oder deaktivieren

Deaktivieren nicht möglich. Das Deaktivieren der Überschreibung kann gefährlich sein, wenn die App nicht mit einem Gerät kompatibel ist, auf dem die Einstellung „Orientierungsanfrage des Geräteherstellers ignorieren“ aktiviert ist. Wenden Sie sich an Android Developer Relations, um die Überschreibung zu deaktivieren.

Property-Flags zum Anpassen der Überschreibung

Für diese Überschreibung sind keine Property-Flags vorhanden.

adb-Befehle zum Testen des Überschreibens

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 wenden die Überschreibung nur vorübergehend an oder entfernen sie.

NEVER_SANDBOX_DISPLAY_APIS

Erzwingt, dass für Pakete niemals Display-API-Sandboxing für eine Aktivität im Letterbox- oder Größenkompatibilitätsmodus angewendet wird. Die Display APIs liefern weiterhin Grenzen für den Anzeigebereich.

Wie Apps dasselbe Ergebnis wie beim Überschreiben erzielen können

Deklarieren Sie Aktivitäten als anpassbar, indem Sie entweder das Manifestattribut android:resizeableActivity auf true oder das Metadaten-Flag android.supports_size_changes auf true setzen.

Apps optimieren

Apps, die angeben, dass sie vollständig in der Größe angepasst werden können, sollten niemals die Displaygröße verwenden, um UI-Elemente zu positionieren. Migrieren Sie Ihre App zu aktuellen APIs, die WindowMetrics bieten. Wenn Sie Jetpack Compose verwenden, können Sie die WindowSizeClass API nutzen, um die Benutzeroberfläche basierend darauf zu rendern, wie viel Bildschirmfläche die App auf dem aktuellen Display hat. Weitere Informationen finden Sie unter Fenstergrößenklassen verwenden.

Überschreiben deaktivieren oder deaktivieren

Deaktivieren nicht möglich. Von verworfenen APIs migrieren

Property-Flags zum Anpassen der Überschreibung

Für diese Überschreibung sind keine Property-Flags vorhanden.

adb-Befehle zum Testen des Überschreibens

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 wenden die Überschreibung nur vorübergehend an oder entfernen sie.

ALWAYS_SANDBOX_DISPLAY_APIS

Erzwingt, dass für Pakete immer das Display-API-Sandboxing angewendet wird, unabhängig vom Fenstermodus. Die Display APIs geben immer die App-Grenzen an.

Wie Apps dasselbe Ergebnis wie beim Überschreiben erzielen können

Deklarieren Sie Aktivitäten als nicht anpassbar, indem Sie entweder das Attribut android:resizeableActivity auf false oder das Metadaten-Flag android.supports_size_changes auf false setzen.

Apps optimieren

Apps, die angeben, dass sie vollständig in der Größe angepasst werden können, sollten sich niemals auf die Displaygröße verlassen, um UI-Elemente zu positionieren. Migrieren Sie Ihre App von verworfenen APIs zu aktuellen APIs, die WindowMetrics bieten. Weitere Informationen finden Sie unter WindowMetricsCalculator.

Überschreiben deaktivieren oder deaktivieren

Deaktivieren nicht möglich. Von verworfenen APIs migrieren

Property-Flags zum Anpassen der Überschreibung

Für diese Überschreibung sind keine Property-Flags vorhanden.

adb-Befehle zum Testen des Überschreibens

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 wenden die Überschreibung nur vorübergehend an oder entfernen sie.

OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS

Erzwingt, dass Pakete die folgenden View-APIs auf Aktivitätsgrenzen beschränken:

Wie Apps dasselbe Ergebnis wie beim Überschreiben erzielen können

Beheben Sie das Problem im Anwendungscode, indem Sie APIs verwenden, die die Grenzen des App-Fensters und Offsets relativ zum App-Fenster anstelle der Grenzen des Gerätebildschirms und Offsets relativ zum Gerätebildschirm bereitstellen.

Apps optimieren

Apps sollten View-APIs verwenden und dabei berücksichtigen, dass Letterboxing und der Mehrfenstermodus auf die App angewendet werden können. Weitere Informationen finden Sie unter WindowMetricsCalculator.

Überschreiben deaktivieren oder 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 des Überschreibens

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 wenden die Überschreibung nur vorübergehend an oder entfernen sie.

OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION

Deaktiviert die erzwungene Rotation. Verbessert die Nutzerfreundlichkeit einiger Apps.

Wie Apps dasselbe Ergebnis wie beim Überschreiben erzielen können

Legen Sie das Property-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 Geräteinformationen. Informationen zur Kamerakompatibilität finden Sie unter Kamerasucher einführen und Unterstützung von Oberflächen mit variabler Größe in Ihrer Kamera-App.

Überschreiben deaktivieren oder deaktivieren

Legen Sie das Property-Flag PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION auf true fest.

Property-Flags zum Anpassen der Überschreibung

<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION"
  android:value="true|false"/>

adb-Befehle zum Testen des Überschreibens

So wenden Sie die Überschreibung an, durch die die erzwungene Drehung entfernt wird:

adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>

So entfernen Sie die Überschreibung, damit die erzwungene Rotation erfolgen kann:

adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>

Hinweis:Die Befehle wenden die Überschreibung nur vorübergehend an oder entfernen sie.

OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH

Deaktiviert die Aktualisierung von Aktivitäten nach dem Erzwingen der Rotation. Verbessert die Nutzerfreundlichkeit, wenn durch das Aktualisieren der Seite der Status in Apps verloren geht.

Wie Apps dasselbe Ergebnis wie beim Überschreiben erzielen können

Legen Sie das Property-Flag PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH auf false fest.

Apps optimieren

Siehe OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION.

Überschreiben deaktivieren oder deaktivieren

Legen Sie das Property-Flag PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH auf true fest.

Property-Flags zum Anpassen der Überschreibung

<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH"
  android:value="true|false"/>

adb-Befehle zum Testen des Überschreibens

So wenden Sie die Überschreibung an, durch die die Aktualisierung von Aktivitäten entfernt wird:

adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>

So entfernen Sie die Überschreibung, die die Aktualisierung von Aktivitäten ermöglicht:

adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>

Hinweis:Die Befehle wenden die Überschreibung nur vorübergehend an oder entfernen sie.

OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE

Bewirkt, dass die Pakete, auf die sie angewendet wird, die Aktivität mit einem onResume() → onPause() → onResume()-Zyklus aktualisieren, anstatt mit einem onResume() → onStop() → onResume()-Zyklus nach der erzwungenen Drehung der Kamera.

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

Siehe OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION.

Überschreiben deaktivieren oder deaktivieren

Legen Sie das Property-Flag PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE auf false fest.

Property-Flags zum Anpassen der Überschreibung

<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE"
  android:value="true|false"/>

adb-Befehle zum Testen des Überschreibens

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 wenden die Überschreibung nur vorübergehend an oder entfernen sie.

OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT

Erzwingt, dass die Kameraausgabe auf die entgegengesetzte Ausrichtung zugeschnitten wird, wenn die Ausrichtung der Kamera im Hochformat nicht mit der natürlichen Geräteausrichtung übereinstimmt. Viele Apps können damit nicht umgehen und zeigen die Bilder dann gestreckt an.

Wie Apps dasselbe Ergebnis wie beim Überschreiben erzielen können

Legen Sie das Property-Flag PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT auf true fest.

Apps optimieren

Siehe OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION.

Überschreiben deaktivieren oder deaktivieren

Legen Sie das Property-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 des Überschreibens

So wenden Sie die Überschreibung an, die das Zuschneiden der inneren Frontkamera erzwingt:

adb shell am compat enable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>

So entfernen Sie die Überschreibung, wodurch das Zuschneiden der Frontkamera innen entfernt wird:

adb shell am compat disable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>

Hinweis:Die Befehle wenden die Überschreibung nur vorübergehend an oder entfernen sie.

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 Vollbildaufnahme zu erzwingen und den Datenschutz der Nutzer zu gefährden, indem sie die Inhalte von Benachrichtigungen offenlegen, die mit der Vollbild-, aber nicht mit der App-Bildschirmfreigabe erfasst werden, und zwar für alle Apps unabhängig vom Fenstermodus.

Wie Apps dasselbe Ergebnis wie beim Überschreiben erzielen können

Das Standardverhalten für die Media Projection (in Android 14, API-Level 34, mit createScreenCaptureIntent() implementiert) zulassen, sodass Nutzer unabhängig vom Fenstermodus entscheiden können, ob sie den gesamten Bildschirm oder ein einzelnes App-Fenster freigeben möchten. Alternativ können Sie createScreenCaptureIntent(MediaProjectionConfig) mit einem MediaProjectionConfig-Argument aufrufen, das von einem Aufruf von createConfigForUserChoice() zurückgegeben wird.

Apps optimieren

Nutzer können auswählen, ob bei der Medienprojektion der gesamte Gerätebildschirm oder ein App-Fenster freigegeben werden soll. Das ist ab Android 14 das Standardverhalten.

Sorgen Sie dafür, dass die Größe Ihrer App angepasst werden kann (resizeableActivity="true"), um den Mehrfenstermodus zu unterstützen.

Überschreiben deaktivieren oder deaktivieren

Da der Schutz der Nutzerdaten sehr wichtig ist, kann Ihre App diese Überschreibung nicht deaktivieren oder deaktivieren.

Property-Flags zum Anpassen der Überschreibung

Keine.

adb-Befehle zum Testen des Überschreibens

So wenden Sie die Überschreibung an, mit der das Deaktivieren der Teilfreigabe des Bildschirms durch die App aufgehoben wird (d. h. die Teilfreigabe des Bildschirms aktiviert wird):

adb shell am compat enable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>

So entfernen Sie die Überschreibung, mit der die App die Funktion zum Teilen von Bildschirmausschnitten deaktivieren kann:

adb shell am compat disable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>

Hinweis:Die Befehle wenden die Überschreibung nur vorübergehend an oder entfernen sie.

OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS

Ermöglicht das Senden von gefälschten Fokusinformationen für Apps, die im Splitscreen-Modus nicht im Fokus sind. Einige Spiele-Engines warten, bis sie den Fokus erhalten, bevor sie den Inhalt der App rendern. Ein gefälschter Fokus hilft Apps, zu vermeiden, dass sie schwarz bleiben, wenn sie fortgesetzt werden und noch keinen Fokus haben.

Wie Apps dasselbe Ergebnis wie beim Überschreiben erzielen können

Legen Sie das Property-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 verarbeitet. Machen Sie Ihre App fit für große Bildschirme, indem Sie die Qualitätsrichtlinien für Apps auf großen Bildschirmen befolgen.

Wenn Sie die Unity-Spiel-Engine verwenden, führen Sie ein Upgrade auf Version 2019.4.40 oder höher durch und exportieren Sie Ihr Spiel noch einmal. Lassen Sie die Option Resizable Window (Größe des Fensters kann geändert werden) in den Einstellungen des Android-Players aktiviert.

Überschreiben deaktivieren oder deaktivieren

Legen Sie das Property-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 des Überschreibens

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:Die Befehle wenden die Überschreibung nur vorübergehend an oder entfernen sie.

OVERRIDE_EXCLUDE_CAPTION_INSETS_FROM_APP_BOUNDS

Wenn die Überschreibung aktiviert ist, erhält die Aktivität eine Konfiguration in Kombination mit den Insets der Untertitelzeile. Normalerweise sind die Insets der Untertitelleiste von der Konfiguration entkoppelt.

Wie Apps dasselbe Ergebnis wie beim Überschreiben erzielen können

Aktivieren Sie die randlose Anzeige oder aktualisieren Sie das Ziel-SDK der App auf API‑Level 35 oder höher. Weitere Informationen finden Sie hier:

Apps optimieren

Sie können dieses Problem vermeiden, wenn Ihre App die Edge-to-Edge-Anzeige unterstützt oder auf API‑Level 35 oder höher ausgerichtet ist.

Überschreiben deaktivieren oder deaktivieren

Aktivieren Sie die randlose Anzeige oder richten Sie Ihre App auf API‑Level 35 oder höher aus.

Property-Flags zum Anpassen der Überschreibung

Keine.

adb-Befehle zum Testen des Überschreibens

So wenden Sie die Überschreibung an:

adb shell am compat enable OVERRIDE_EXCLUDE_CAPTION_INSETS_FROM_APP_BOUNDS <package>

So entfernen Sie die Überschreibung:

adb shell am compat disable OVERRIDE_EXCLUDE_CAPTION_INSETS_FROM_APP_BOUNDS <package>

Hinweis:Die Befehle wenden die Überschreibung nur vorübergehend an oder entfernen sie.

Zusätzliche Ressourcen


  1. Ein Eigentümer eines virtuellen Geräts ist eine vertrauenswürdige oder privilegierte App, die ein virtuelles Gerät verwaltet. Besitzer virtueller Geräte erstellen virtuelle Geräte, um Apps zu rendern und dann auf Remote-Geräte wie PCs, VR-Geräte oder Infotainmentsysteme im Auto zu übertragen. Der Inhaber des virtuellen Geräts befindet sich auf einem lokalen Gerät, z. B. einem Smartphone.