Gerätekompatibilitätsmodus

Android aktiviert einen Kompatibilitätsmodus für Apps, die Einschränkungen für die Ausrichtung oder Größenänderung deklarieren. Der Kompatibilitätsmodus sorgt für ein akzeptables App-Verhalten auf Geräten mit großem Bildschirm, faltbaren Smartphones und Desktop-Umgebungen, aber mit suboptimaler Nutzerfreundlichkeit.

Mit App-spezifischen Überschreibungen können Gerätehersteller, Inhaber virtueller Geräte1 und Nutzer das App-Verhalten ändern, um das App-Layout zu verbessern oder zu verhindern, dass Apps auf bestimmten Geräten nicht mehr funktionieren.

Android 16

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

Die folgenden App-spezifischen Überschreibungen funktionieren nicht für Apps, die auf API-Level 36 ausgerichtet sind:

Deaktivieren

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 von API-Level 36 deaktivieren möchten, deklarieren Sie das Manifestattribut PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY.

Wenn Sie die Erfassung für eine bestimmte Aktivität deaktivieren möchten, legen Sie das Attribut im <activity>-Element fest:

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

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

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

Wenn Ihre App auf Android 16 (API-Level 36) oder höher ausgerichtet ist, wird durch dieses Attribut die Ausrichtung des Displays nicht gesperrt und die Bildschirmdrehung auf großen Displays nicht verhindert.

Referenzgeräte

Die folgenden Geräte erfordern möglicherweise App-spezifische Überschreibungen, da sie ungewöhnliche Konfigurationen haben oder Konfigurationen, die von Apps nicht gut unterstützt werden:

  • Tablets:Die natürliche Ausrichtung einiger Tablets, z. B. des Pixel Tablet, ist das Querformat. 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, stimmen App-Layouts und Kameravorschau möglicherweise nicht mit dem Gerätedisplay überein.
  • Faltbare Geräte im Querformat:Einige faltbare Geräte wie das Pixel Fold sind im zusammengeklappten Zustand im Hochformat, im aufgeklappten Zustand jedoch im Querformat. Wenn Apps davon ausgehen, dass die Ausrichtung im aufgeklappten Zustand das Hochformat ist, sind Flackerschleifen oder Layoutprobleme wahrscheinlich.
  • Faltbare Flip-Phones:Aufgeklappte Flip-Phones sind in der Regel im Hochformat. Zusammengeklappt haben die Smartphones jedoch 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-Freiform-Fenster-Sitzung auf externen, verbundenen Displays gestartet werden. Apps müssen externe Displays nach Informationen wie Bildschirmgröße und Auflösung abfragen. Andernfalls können Apps falsche Annahmen über die Displays treffen, was zu fehlerhaftem App-Verhalten führen kann.
  • Autodisplays:Viele, aber nicht alle Autodisplays sind im Querformat. Die Entwicklung von Apps für geparkte Autos 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 App-Ausrichtung, der Größenänderung und des Seitenverhältnisses, einer falschen Handhabung der Ausrichtung der Kameravorschau und einer fehlerhaften Verwendung von APIs auf.

Letterboxing

Beim Letterboxing wird die App in der Mitte des Bildschirms oder auf großen Bildschirmen auf einer der beiden Seiten positioniert, um den Zugriff zu erleichtern. Der ungenutzte Anzeigebereich an den Seiten oder oben und unten in der App wird mit Mattes (einfarbigen Balken oder unscharfem Hintergrund) gefüllt.

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

Abbildung 1. Eine App, die auf das Hochformat beschränkt ist, wird auf Tablets und faltbaren Geräten im Querformat mit Letterbox-Effekt angezeigt.

Problem

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

Zu den Konfigurationseinstellungen, mit denen die Ausrichtung und Größenänderung 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 damit 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 Bildschirmen (mittlere oder erweiterte Fenstergrößenklasse) unabhängig von dieser Einstellung.

  • maxAspectRatio: Gibt das maximale Seitenverhältnis an, das von der App unterstützt wird. maxAspectRatio kann nur für Apps festgelegt werden, bei denen resizeableActivity auf false gesetzt ist.

  • minAspectRatio: Gibt das von der App unterstützte Mindestseitenverhältnis an. minAspectRatio kann nur für Apps festgelegt werden, bei denen resizeableActivity auf false gesetzt ist.

Optimierung

Die App sollte alle Ausrichtungen und Größen von Geräten und Mehrfenstermodi 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 für Kompatibilitätsprobleme

Wenn eine App mit fester Ausrichtung oder festem Seitenverhältnis in einem Fenster ausgeführt wird, dessen Größe oder Ausrichtung von der App nicht direkt unterstützt wird, wird die App von Android im Letterbox-Format angezeigt, um die Kontinuität zu wahren.

Ab Android 12 (API-Level 31) und 12L (API-Level 32) bietet die Plattform eine Reihe von Verbesserungen für Apps im Letterbox-Format. 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.

In 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 die App überlagern, sind halbtransparent, sodass Symbole in den Leisten immer über dem Letterbox-Hintergrund sichtbar sind.
  • Konfigurierbares Seitenverhältnis: Das Seitenverhältnis der App kann angepasst werden, um die Darstellung der App zu verbessern.

Abbildung 2: Letterbox-App mit Verbesserungen der Benutzeroberfläche.

12L (API-Level 32) bietet die folgenden funktionalen Verbesserungen:

  • Konfigurierbare Positionierung:Auf großen Bildschirmen 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 die Schaltfläche zum Neustarten für den Größenkompatibilitätsmodus neu gestalten, damit Nutzer sie besser erkennen.

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

Abbildung 3: Letterbox-App mit Dialogfeld für Nutzerinformationen.

Kompatibilitätsmodus für die Größe

Der Größenkompatibilitätsmodus ist ein Letterbox-Modus, bei dem das Seitenverhältnis der App beibehalten wird und der ein Steuerelement für den Neustart enthält. Mit dem Steuerelement können Nutzer die App neu starten und die Anzeige neu zeichnen. Android ruft den Größenkompatibilitätsmodus für Apps auf, deren Größe nicht angepasst werden kann. Wenn eine Aktivität in einen Display-Container verschoben wird, der nicht mit den Abmessungen der Aktivität kompatibel ist, kann das System die App so skalieren, dass sie das Display des Geräts in mindestens einer Dimension 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 zusammen- oder aufgeklappt
  • Zwischen Vollbild- und Splitscreen-Anzeigemodus wechseln

Problem

Der Größenkompatibilitätsmodus gilt in der Regel für Aktivitäten, die in Bezug auf Ausrichtung oder Seitenverhältnis eingeschränkt sind und so konfiguriert sind (oder vom System so bestimmt werden), dass ihre Größe nicht geändert werden kann.

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

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

Optimierung

Die App sollte alle Displaygrößen unterstützen. Wenn Sie die Größe Ihrer App anpassbar machen möchten, setzen Sie im App-Manifest das Attribut android:resizeableActivity des Elements <activity> oder <application> auf true. Entwerfen Sie responsive/adaptive Layouts für Ihre App. Weitere Informationen finden Sie unter Verschiedene Displaygrößen unterstützen und Mehrfenstermodus unterstützen.

Problemumgehung für Kompatibilitätsprobleme

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

Kompatibilitätsmodus für Displays

Der Anzeigekompatibilitätsmodus verhindert, dass eine App neu gestartet wird, wenn sie zwischen verschiedenen Displays verschoben wird. Dies kann eine Konfigurationsänderung auslösen, z. B. eine Änderung des Farbmodus, der Touchscreen-Verfügbarkeit oder der Bildschirmdichte.

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 im Anzeigekompatibilitätsmodus die Konfiguration der App nicht eingefroren. Die App kann weiterhin alle Konfigurationsupdates über APIs wie den Callback onConfigurationChanged() empfangen, wird aber von einem störenden Neustart verschont. Das bedeutet, dass Spiele, die APIs wie onConfigurationChanged() ordnungsgemäß unterstützen, ihre Benutzeroberfläche auch dann responsiv 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 Anzeigeausrichtungen unterstützt, fordert sie möglicherweise wiederholt neue Ausrichtungen an, wenn eine Konfigurationsänderung auftritt. 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 festgelegte Ausrichtungsbeschränkungen ignoriert und stattdessen Kompatibilitätsmodi erzwungen werden. Ein faltbares Gerät könnte beispielsweise die Einstellung android:screenOrientation="portrait" einer Aktivität ignorieren, wenn die Aktivität auf dem inneren Bildschirm des Geräts im Querformat in Tablet-Größe angezeigt wird.

Wenn die Ausrichtungsbeschrä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 Neustart der App aus und so weiter in einer Endlosschleife.

Eine weitere Möglichkeit ist, dass die natürliche Ausrichtung (die übliche Ausrichtung, wie von Android festgelegt) eines Gerätebildschirms das Querformat ist. Das heißt, der Aufruf von Display#getRotation() gibt Surface.ROTATION_0 zurück, während das Gerät ein Querformat-Seitenverhältnis hat. In der Vergangenheit wurde bei Apps davon ausgegangen, dass Display.getRotation() = Surface.ROTATION_0 bedeutet, dass sich das Gerät im Hochformat befindet. Das ist jedoch nicht immer der Fall, z. B. auf dem inneren Display einiger faltbarer Geräte und auf einigen Tablets.

Eine App im Querformat auf einem inneren Display eines faltbaren Geräts könnte die Bildschirmdrehung prüfen, den Wert ROTATION_0 erhalten, davon ausgehen, dass die natürliche Ausrichtung des Geräts das Hochformat ist, und setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT ) aufrufen, um das App-Layout neu zu konfigurieren. Nach dem Neustart der App (im Querformat) wird die Bildschirmausrichtung möglicherweise noch einmal geprüft, der Wert ROTATION_0 empfangen, setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) aufgerufen und die Endlosschleife fortgesetzt.

Optimierung

Apps sollten Folgendes nicht 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
  • Lege die Ausrichtung anhand von Signalen fest, die nicht mit der aktuellen Fenstergröße zusammenhängen, z. B. Display#getRotation(), Vorhandensein eines FoldingFeature oder eingestellte APIs.

Problemumgehung für Kompatibilitätsprobleme

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 erzwungene Drehung für die Kamerakompatibilität wurde aktiviert (siehe Kameravorschau unten).

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

  • Die Aktivität hat mehr als zwei Ausrichtungsanfragen in einer Sekunde gestellt, was auf eine Schleife hindeutet. Von den beiden Anfragen in der Schleife verwendet Android diejenige, die den Anzeigebereich der App maximiert.

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

  • Inhaber 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.

Weitere Informationen findest du unter Kameravorschau im Desktop-Freiform-Fenster.

Problem

Im Android Compatibility Definition Document heißt es, dass ein Kamerabildsensor „so ausgerichtet sein MUSS, dass die lange Seite der Kamera mit der langen Seite des Bildschirms übereinstimmt“.

Apps gehen oft 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 und ihren Kamerasensoren kann jedoch das Querformat sein. Außerdem können neue Formfaktoren wie faltbare Smartphones mehrere natürliche Ausrichtungen und mehrere Kamerasensoren in unterschiedlichen Ausrichtungen haben.

Wenn eine Aktivität mit einer Kameraausrichtung gestartet wird, die die App nicht erwartet, oder wenn zwischen verschiedenen Kameras oder Gerätebildschirmen (bei faltbaren Geräten) gewechselt wird, 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 anzuzeigen. Apps müssen die Geräterotation, die Sensorrotation und das Seitenverhältnis des Bildschirms oder Fensters berechnen und die Ergebnisse dann auf die Kameravorschau anwenden. Eine ausführliche Anleitung finden Sie unter Kameravorschau und Einführung in den Kamerasucher.

Problemumgehung für Kompatibilitätsprobleme

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. Android richtet das Hochformatfenster von Apps, die auf das Hochformat beschränkt sind, an der natürlichen Ausrichtung des Geräts aus. Das ist das, was die meisten Apps erwarten. Android schneidet das Bild des Kamerasensors auch zu, wenn die Sensorausrichtung Querformat und die Kameravorschau Hochformat ist. Zu den spezifischen Problemumgehungen gehören:

  • Kameravorschau für Apps, die nur im Hochformat angezeigt werden, drehen:Apps, die nur im Hochformat angezeigt werden, erwarten, dass die natürliche Ausrichtung des Geräts und die Ausrichtung des Kamerasensors im 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 angezeigt werden kann, mit der Kamera verbunden ist, erzwingt Android eine Drehung der App, um das Hochformatfenster der App an die natürliche Ausrichtung des Geräts anzupassen.

    Auf einigen Tablets (siehe Referenzgeräte) wird das Hochformatfenster der App in das Vollbild-Hochformat gedreht, um es an die natürliche Ausrichtung des Geräts anzupassen. Die App nimmt nach der erzwungenen Drehung den gesamten Bildschirm ein.

    Auf dem inneren Querformat-Bildschirm von faltbaren Geräten (siehe Referenzgeräte) werden Aktivitäten, die nur im Hochformat angezeigt werden, ins Querformat gedreht, um sie an die natürliche Ausrichtung des aufgeklappten Geräts anzupassen. Die App wird nach dem Erzwingen der Drehung im Letterbox-Format angezeigt.

  • Zuschneiden der inneren Frontkamera:Der Sensor der inneren Frontkamera ist bei einigen faltbaren Geräten im Querformat ausgerichtet. Zusätzlich zum erzwungenen Drehen der Kameravorschau auf dem inneren Display des faltbaren Geräts schneidet Android das Sichtfeld der inneren Frontkamera (Querformat) so zu, dass der Sensor eine Ansicht entgegengesetzt zur Geräteausrichtung erfasst.

  • Aktualisierung der Kameravorschau erzwingen:Das System wechselt nach der erzwungenen Drehung zwischen den Aktivitätsmethoden onStop() und onStart() (standardmäßig) oder onPause() und onResume() (angewendet durch die app-spezifische Überschreibung OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE), um sicherzustellen, dass die Kameravorschau richtig angezeigt wird.

  • Skalierung des Seitenverhältnisses:Das System ändert das Seitenverhältnis der erzwungen gedrehten Kameravorschau dynamisch auf ein höheres Mindestseitenverhältnis, damit die Kameravorschau richtig skaliert wird.

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

Häufig missbrauchte APIs

Da Android jetzt Funktionen wie den Multi-Window-Modus und Geräte wie faltbare Smartphones unterstützt, wurden ältere APIs eingestellt und durch aktuelle APIs ersetzt, die für alle Displaygrößen und Geräteformfaktoren geeignet sind. Die verworfenen APIs sind jedoch weiterhin für die Abwärtskompatibilität verfügbar.

Einige View-APIs sind für spezielle Zwecke konzipiert, die von Entwicklern nicht immer gut verstanden werden.

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 Ansichts-APIs, um allgemeine Anzeigemesswerte abzurufen. Das führt zu Fehlberechnungen bei der Neupositionierung von UI-Elementen nach Größenänderungen des App-Fensters, was wiederum Layoutprobleme verursacht.

Eingestellte und häufig falsch verwendete Display APIs:

Weitere Informationen findest du unter Unterstützung für den Mehrfenstermodus.

Missbräuchlich verwendete View APIs:

Optimierung

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

Problemumgehung für Kompatibilitätsprobleme

Zwei Überschreibungen passen die verworfenen Display-APIs und die falsch 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 transparenter Hintergrundstile, z. B.:

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

Designs, die sich auf Dialogfelder beziehen, z. B. Theme.MaterialComponents.Dialog, können Stile enthalten, die Aktivitäten transparent machen.

Transparente Aktivitäten decken nicht den gesamten verfügbaren Anzeigebereich ab. Daher sind sie schwer zu verwalten, da sich der verfügbare Anzeigebereich aufgrund von Konfigurationsänderungen wie Gerätedrehung, Ein- und Ausklappen des Geräts und Mehrfenstermodus ändern kann.

Problem

Eine transparente Aktivität sollte den Grenzen der ersten nicht transparenten 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). Daher kann das System die Grenzen der Trampolinaktivität, die die transparente Berechtigungsdialogfeld-Aktivität gestartet hat, 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 während des gesamten Lebenszyklus der transparenten Aktivität verfügbar sein, von der Erstellung bis zur Zerstörung der Aktivität. Aus diesem Grund sollten Berechtigungsanfragen nicht über Trampolin-Aktivitäten gestartet werden.

Wenn eine Trampolin-Aktivität eine Berechtigungsanfrage startet, kann der Nutzer das Dialogfeld für die Berechtigung möglicherweise nicht sehen, da die Trampolin-Aktivität zerstört wurde, bevor der Nutzer die Möglichkeit hatte, auf das Dialogfeld zu reagieren. Außerdem wurden die Abmessungen und die Position der Dialogfeld-Aktivitä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 ein Stil die Hintergrundtransparenz festlegt oder weil der Inhalt der Aktivität nicht den verfügbaren Anzeigebereich ausfüllt. Wenn eine transparente Aktivität den verfügbaren Anzeigebereich ausfüllt, wendet das System automatisch abgerundete Ecken auf die Aktivität an, wenn dies vom Gerätehersteller so konfiguriert wurde. Wenn eine transparente Aktivität (z. B. ein Berechtigungsdialogfeld) den verfügbaren Platz nicht ausfüllt, liegt es an dir, ob du abgerundete Ecken anwenden möchtest oder nicht.

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

Problemumgehung für Kompatibilitätsprobleme

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

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

  • Kompatibilitätsmodus für die Größe
  • Ausrichtung
  • Seitenverhältnis

Unity-Spiele

Unity-Spiele werden auf Android-Geräten im Vollbild- oder Mehrfenstermodus ausgeführt. Bei vielen Unity-Spielen geht jedoch der Fokus verloren und es werden keine Inhalte mehr dargestellt, wenn die App in den Mehrfenstermodus versetzt 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 reagierte jedoch nicht korrekt auf den Aktivitätslebenszyklus im Mehrfenstermodus, was dazu führte, dass UnityPlayer die Wiedergabe anhielt, wenn die App den Fokus verlor. Der Player hat einen schwarzen Bildschirm oder den letzten, eingefrorenen Frame des Spiels gerendert. Das Gameplay wurde erst fortgesetzt, wenn der Nutzer auf den Bildschirm tippte. Viele Apps, die die Unity-Engine verwenden, sind von diesem Problem betroffen und werden im Mehrfenstermodus als schwarzes Fenster gerendert.

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-Playereinstellungen aktiviert. Andernfalls wird das Spiel pausiert, wenn es nicht im Fokus ist, obwohl es im Mehrfenstermodus vollständig sichtbar ist.

Problemumgehung für Kompatibilitätsprobleme

Gerätehersteller können die App-spezifische Überschreibung OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS anwenden, um einer App im Mehrfenstermodus ein gefälschtes Fokussierungsereignis bereitzustellen. Durch das Überschreiben kann die Aktivität Inhalte neu zeichnen und wird nicht ausgeblendet.

Desktop-Freiform-Fenster

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

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

Animation einer App im Hochformat, die ins Querformat wechselt.

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

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

Kameravorschau im Desktop-Freiform-Fenster

Wenn eine App im Desktop-Freiform-Fenstermodus ausgeführt wird, können sich die Displaydrehung und die Fensterausrichtung von der Vollbildanzeige auf Standard-Smartphones unterscheiden.

Problem

Apps gehen oft davon aus, dass die Geräteausrichtung und die Ausrichtung des Kamerasensors im Hochformat sind. Das kann 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 anzuzeigen. Apps müssen die Gerätedrehung, die Sensordrehung und das Seitenverhältnis des Fensters berechnen und die Ergebnisse dann auf die Kameravorschau anwenden, die auch auf Änderungen der Fensterkonfiguration reagieren sollte. Eine ausführliche Anleitung finden Sie unter Kameravorschau.

Problemumgehung für Kompatibilitätsprobleme

Wenn Apps mit fester Ausrichtung im Desktop-Freiform-Fenster eine Kameravorschau starten, kann das System eine Kamerakompatibilitätsbehandlung auslösen, um gestreckte und seitliche Vorschauen zu vermeiden.

Bei der Behandlung wird die Umgebung so eingeschränkt, dass sie der angeforderten Ausrichtung entspricht:

  • Letterbox-Format für das App-Fenster in der angeforderten Ausrichtung verwenden:Dadurch werden Probleme mit der Streckung aufgrund einer ungeeigneten Skalierung vermieden.

  • Sandbox für die Displaydrehung: Die Behandlung simuliert, dass das Gerät in der angeforderten Ausrichtung platziert wird. Da die häufigste falsche Annahme für Kameravorschauen darin besteht, dass die App auf einem Gerät im Hochformat ausgeführt wird, wird die Displaydrehung für Apps, die das Hochformat anfordern, auf 0 Grad und für Geräte, die das Querformat anfordern, auf 90 Grad beschränkt.

  • Kamerazuschnitt:Wenn sich die Displayausrichtung geändert hat, wird dies im Kamerafeed widergespiegelt: Wenn sich ein Gerät im Querformat befindet und die Behandlung für eine App ausgelöst wird, die das Hochformat anfordert, wird das Sichtfeld der Kamera so zugeschnitten, dass es dem einer Kamera im Hochformat ähnelt.

  • Kamerafeed drehen und zuschneiden:Das System durchläuft nach der Anwendung der Behandlung die Aktivitätsmethoden onStop() und onStart() (standardmäßig) oder onPause() und onResume() (angewendet durch die app-spezifische Überschreibung OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE), um sicherzustellen, dass die Kameravorschau richtig angezeigt wird.

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

Größe wird geändert

Wenn eine simulierte angeforderte Ausrichtung aktiv ist, wird die Sucher-UI beim Ändern der Fenstergröße skaliert, wobei das Seitenverhältnis beibehalten wird. Die Größe des restlichen App-Fensters kann frei angepasst werden.

App auf Kompatibilitätsprobleme testen

Wenn Sie Ihre App testen und herausfinden möchten, wie sie sich auf verschiedenen Formfaktoren verhält, können Sie die folgenden Ressourcen nutzen:

Ist Letterbox-Bild

Prüfe, ob jede Aktivität den gesamten für die App verfügbaren Anzeigebereich nutzen kann. Deklariere zuerst den folgenden Code in deinem 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ühre dann einen Test aus, um das Verhalten zu prüfen und sicherzustellen, dass die Zielaktivität nicht im Letterbox-Format angezeigt wird:

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 solltest du diese Art von Test nur so lange ausführen, bis er erfolgreich ist und bestätigt, dass die Aktivitäten deiner App den gesamten für die App verfügbaren Anzeigebereich einnehmen. Teste deine 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. Beispiel: Die Überschreibung FORCE_RESIZE_APP weist das System an, den Größenkompatibilitätsmodus zu umgehen und die Größe der App an die Displayabmessungen anzupassen, auch wenn im App-Manifest resizeableActivity="false" angegeben ist.

Gerätehersteller wenden Überschreibungen auf ausgewählte Apps oder alle Apps auf bestimmten Geräten an. Unter Android 14 (API-Level 34) und höher können Nutzer über die Geräteeinstellungen Überschreibungen auf Apps anwenden. Unter Android 16 (API-Level 36) und höher können Inhaber virtueller Geräte Überschreibungen auf ausgewählten Geräten anwenden, die sie verwalten.

App-spezifische Überschreibungen durch Nutzer

Unter Android 14 und höher können Nutzer das Seitenverhältnis von Apps über ein Einstellungsmenü ändern. Geräte mit großem Display, z. B. 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 den Standardwert der App 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 Kompatibilitätsüberschreibung für das Seitenverhältnis deaktivieren möchten, fügen Sie Ihrem App-Manifest das Attribut hinzu und setzen Sie den Wert auf false:

    <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 das Attribut auf true festlegen, hat das keine Auswirkungen.

  • PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_FULLSCREEN_OVERRIDE

    Wenn Sie die Vollbildoption der Kompatibilitätsüberschreibung für das Seitenverhältnis des Nutzers 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.

    Wenn Sie dieses Attribut 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 je nach verfügbarem Platz auf dem Display verschiedene Layouts zu unterstützen.

Gerätespezifische Überschreibungen pro App

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

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

Du kannst deine App mit aktivierten oder deaktivierten Überschreibungen mithilfe des Kompatibilitäts-Frameworks testen (siehe Tools für das Kompatibilitäts-Framework). Wenn diese Option aktiviert ist, gelten die Überschreibungen für die gesamte App.

Du kannst auch die Android Debug Bridge (adb) verwenden, um Überschreibungen zu aktivieren oder zu deaktivieren und festzulegen, welche Überschreibungen für deine App gelten.

So aktivieren oder deaktivieren Sie Überschreibungen:

adb shell am compat enable/disable <override name/id> <package>

Prüfe für die Referenzgeräte, welche Überschreibungen für deine 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 Hinweise dazu, wie Sie Ihre App so optimieren können, dass sie nicht auf Überschreibungen angewiesen ist. Sie können Ihrem App-Manifest Attribut-Flags hinzufügen, um einige Überschreibungen zu deaktivieren.

App-spezifische Überschreibungen
Typ Name ID Beschreibung
Eingabekompatibilität OVERRIDE_MOUSE_TO_TOUCH 413207127 Konvertiert MotionEvent-Instanzen von einem Mausgerät in Touch-Events, indem die MotionEvent-Quelle und der Tooltyp neu geschrieben werden, wenn sie an die Anwendung übermittelt werden.
Größenänderung FORCE_RESIZE_APP 174042936 Umgeht den Kompatibilitätsmodus für die Seitengröße der App bei Konfigurationsänderungen.
FORCE_NON_RESIZE_APP 181136395 Erzwingt bei Konfigurationsänderungen den Kompatibilitätsmodus für die Größe der 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 diese Option aktiviert ist (Standardeinstellung), wird der Bereich auf Aktivitäten im Hochformat beschränkt.
OVERRIDE_MIN_ASPECT_RATIO_SMALL 349045028 Ändert das minimale Seitenverhältnis auf 4:3.
OVERRIDE_MIN_ASPECT_RATIO_MEDIUM 180326845 Ändert das minimale Seitenverhältnis auf 3:2.
OVERRIDE_MIN_ASPECT_RATIO_LARGE 180326787 Ändert das minimale Seitenverhältnis auf 16:9.
OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN 208648326 Ändert das minimale Seitenverhältnis, sodass es 50% der Displaygröße (oder dem Seitenverhältnis des geteilten Bildschirms) entspricht.
OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN 218959984 Deaktiviert die Überschreibung des Mindestseitenverhältnisses, sodass Apps im Hochformat im Vollbildmodus angezeigt werden.
Ausrichtung OVERRIDE_ANY_ORIENTATION 265464455 Ermöglicht das Überschreiben jeder 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 auf das Hochformat, wenn eine Aktivität eine undefinierte Ausrichtung hat.
OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR 265451093 Überschreibt die Ausrichtung auf nosensor (natürliche Ausrichtung des Geräts verwenden), wenn eine Aktivität eine nicht definierte Ausrichtung hat.
OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE 266124927 Dreht Apps, die nur im Querformat angezeigt werden können, um 180 Grad.
OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA 265456536 Beschränkt den Umfang der Ausrichtungsüberschreibung auf den Zeitraum, in dem die App mit der Kamera verbunden ist.
OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION 255940284 Legt die Anzeige auf die feste natürliche Ausrichtung im Querformat fest, 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 bei der 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, wird dies als Endlosschleife für die Drehung betrachtet und die Überschreibung wird angewendet.
OVERRIDE_RESPECT_REQUESTED_ORIENTATION 236283604 Verhindert Letterboxing, indem die Einstellung des Geräteherstellers zum Ignorieren von Ausrichtungsanfragen 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 Grenzen für den Anzeigebereich zurück. Manchmal wird jedoch davon ausgegangen, 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 wird jedoch davon ausgegangen, 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 Drehung. Standardmäßig werden alle Kamera-Apps mit fester Ausrichtung zwangsweise gedreht, wenn die Kameravorschau geöffnet ist.
OVERRIDE_CAMERA_COMPAT_DISABLE_SIMULATE_REQUESTED_ORIENTATION 398195815 Deaktiviert die Simulation der angeforderten Ausrichtung für die Kamerakompatibilität. Standardmäßig werden Kamera-Apps mit fester Ausrichtung an die angeforderte Ausrichtung angepasst, wenn die Kameravorschau geöffnet ist.
OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH 264304459 Die standardmäßige harte Aktualisierung, die beim erzwungenen Drehen einer Kameravorschau angewendet wird, wurde entfernt.
OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE 264301586 Wechselt von einer harten Aktualisierung zu einer weichen Aktualisierung, wenn eine Kameravorschau erzwungen gedreht wird. Dadurch wird der Status während der erzwungenen Drehung beibehalten. Standardmäßig wird die Kameraansicht unter Android vollständig aktualisiert, wenn die Ausrichtung der Kameravorschau erzwungen wird. Die harte Aktualisierung kann dazu führen, dass Apps ihren Status verlieren oder schwarz werden, je nachdem, wie die Apps ihren vorherigen Status im Cache gespeichert haben.
OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT 250678880 Schneidet den Bildpuffer der inneren Frontkamera zu. Wenn die Überschreibung deaktiviert ist, wird der Zuschnitt der inneren Frontkamera entfernt und das Sichtfeld der Kameravorschau vergrößert. Bei einigen faltbaren Geräten (siehe Referenzgeräte) schneidet das System die Kameravorschau aller Kamera-Apps standardmäßig zu, 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 schwarz wird. Durch die Überschreibung kann Android ein gefälschtes Fokussierungsereignis an die App senden, das der App signalisiert, dass sie wieder Inhalte zeichnen soll.
OVERRIDE_EXCLUDE_CAPTION_INSETS_FROM_APP_BOUNDS 388014743 Schließt die Einrückungen der Titelleiste aus den App-Grenzen in der Aktivitätskonfiguration im Desktop-Freiform-Fenster aus. Dadurch wird verhindert, dass obere oder untere UI-Elemente der App von der Titelleiste verdeckt oder abgeschnitten werden, wenn die App die Einrückungen der Titelleiste nicht verarbeitet.

OVERRIDE_MOUSE_TO_TOUCH

Aktiviert die Kompatibilitätsbehandlung, die MotionEvent-Instanzen von einer Maus oder einem Touchpad in Touch-Ereignisse umwandelt, indem die MotionEvent-Quelle in SOURCE_TOUCHSCREEN und der MotionEvent-Tooltyp in TOOL_TYPE_FINGER umgeschrieben werden, wenn die Bewegungsereignisse an die Anwendung gesendet werden.

Wie Apps dasselbe Ergebnis wie eine Überschreibung erzielen können

Nicht zutreffend. Das Problem sollte in der Anwendungslogik gelöst werden.

Apps optimieren

Ihre App sollte Eingabeereignisse von Maus und Touchpad verarbeiten, einschließlich Touchpad-Gesten und Scrollen mit dem Mausrad. Weitere Informationen finden Sie unter Tastatur, Maus und Touchpad.

Überschreibung deaktivieren oder ablehnen

Deklarieren Sie FEATURE_PC in einem <uses-feature>-Element im Manifest der Anwendung.

<uses-feature android:name="android.hardware.type.pc"
              android:required="false" />

Hinweis:Setze android:required="false", damit die PC-Funktion optional ist und Google Play die App nicht auf Nicht-PC-Geräten ausschließt.

Property-Flags zum Anpassen der Überschreibung

Keine.

adb-Befehle zum Testen der Überschreibung

So wenden Sie die Überschreibung an:

adb shell am compat enable OVERRIDE_MOUSE_TO_TOUCH <package>

So entfernen Sie die Überschreibung:

adb shell am compat disable OVERRIDE_MOUSE_TO_TOUCH <package>

Hinweis:Mit den Befehlen wird die Überschreibung nur vorübergehend angewendet oder entfernt.

FORCE_RESIZE_APP

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

Wie Apps dasselbe Ergebnis wie eine Überschreibung 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 können. Weitere Informationen findest du unter Verschiedene Displaygrößen unterstützen.

Überschreibung deaktivieren oder ablehnen

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-Größe 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:Mit den Befehlen wird die Überschreibung 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 veränderbar sind und bei Konfigurationsänderungen in den Größenkompatibilitätsmodus wechseln. Gilt für alle Displaygrößen.

Wie Apps dasselbe Ergebnis wie eine Überschreibung erzielen können

Setzen Sie im App-Manifest sowohl das Attribut android:resizeableActivity als auch das Metadaten-Flag android.supports_size_changes auf false und deklarieren Sie 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 bei einer Größenänderung gut verhalten. Weitere Informationen finden Sie unter android:resizeableActivity.

Überschreibung deaktivieren oder ablehnen

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 in der Größe 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:Mit den Befehlen wird die Überschreibung nur vorübergehend angewendet oder entfernt.

OVERRIDE_MIN_ASPECT_RATIO

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

Wie Apps dasselbe Ergebnis wie eine Überschreibung erzielen können

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

Apps optimieren

Legen Sie in Ihrer App keine Einschränkungen für das Seitenverhältnis fest. Achten Sie darauf, dass Ihre App verschiedene Displaygrößen unterstützt. Verwenden Sie Fenstergrößenklassen, um verschiedene Layouts zu unterstützen, je nachdem, wie viel Platz Ihre App auf dem Bildschirm hat. Weitere Informationen finden Sie unter Compose WindowSizeClass API und View WindowSizeClass API.

Überschreibung deaktivieren oder ablehnen

Geben Sie eine Einschränkung für das Seitenverhältnis an oder setzen Sie das Attribut-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:Mit den Befehlen wird die Überschreibung nur vorübergehend angewendet oder entfernt.

OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY

Schränkt App-Einstellungen ein, die ein bestimmtes Mindestseitenverhältnis für Aktivitäten mit ausschließlicher Hochformatausrichtung erzwingen. Standardmäßig aktiviert und nur wirksam, wenn OVERRIDE_MIN_ASPECT_RATIO ebenfalls aktiviert ist.

Wie Apps dasselbe Ergebnis wie eine Überschreibung erzielen können

Siehe OVERRIDE_MIN_ASPECT_RATIO.

Apps optimieren

Siehe OVERRIDE_MIN_ASPECT_RATIO.

Überschreibung deaktivieren oder ablehnen

Siehe OVERRIDE_MIN_ASPECT_RATIO.

Property-Flags zum Anpassen der Überschreibung

Siehe 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:Mit den Befehlen wird die Überschreibung nur vorübergehend angewendet oder entfernt.

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 eine Überschreibung erzielen können

Siehe OVERRIDE_MIN_ASPECT_RATIO.

Apps optimieren

Siehe OVERRIDE_MIN_ASPECT_RATIO.

Überschreibung deaktivieren oder ablehnen

Siehe OVERRIDE_MIN_ASPECT_RATIO.

Property-Flags zum Anpassen der Überschreibung

Siehe 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_SMALL <package>

So entfernen Sie die Überschreibung:

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_SMALL <package>

Hinweis:Mit den Befehlen wird die Überschreibung nur vorübergehend angewendet oder entfernt.

OVERRIDE_MIN_ASPECT_RATIO_MEDIUM

Legt das minimale Seitenverhältnis der Aktivität auf einen mittleren Wert (3:2) fest.

Wie Apps dasselbe Ergebnis wie eine Überschreibung erzielen können

Siehe OVERRIDE_MIN_ASPECT_RATIO.

Apps optimieren

Siehe OVERRIDE_MIN_ASPECT_RATIO.

Überschreibung deaktivieren oder ablehnen

Siehe OVERRIDE_MIN_ASPECT_RATIO.

Property-Flags zum Anpassen der Überschreibung

Siehe 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 großen Wert (16:9) fest.

Wie Apps dasselbe Ergebnis wie eine Überschreibung erzielen können

Siehe OVERRIDE_MIN_ASPECT_RATIO.

Apps optimieren

Siehe OVERRIDE_MIN_ASPECT_RATIO.

Überschreibung deaktivieren

Siehe OVERRIDE_MIN_ASPECT_RATIO.

Property-Flags zum Anpassen der Überschreibung

Siehe 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:Mit den Befehlen wird die Überschreibung nur vorübergehend angewendet oder entfernt.

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, um Letterboxing zu vermeiden.

Wie Apps dasselbe Ergebnis wie eine Überschreibung erzielen können

Siehe OVERRIDE_MIN_ASPECT_RATIO.

Apps optimieren

Siehe OVERRIDE_MIN_ASPECT_RATIO.

Überschreibung deaktivieren oder ablehnen

Siehe OVERRIDE_MIN_ASPECT_RATIO.

Property-Flags zum Anpassen der Überschreibung

Siehe 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:Mit den Befehlen wird die Überschreibung nur vorübergehend angewendet oder entfernt.

OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN

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

Wie Apps dasselbe Ergebnis wie eine Überschreibung erzielen können

Siehe OVERRIDE_MIN_ASPECT_RATIO.

Apps optimieren

Siehe OVERRIDE_MIN_ASPECT_RATIO.

Überschreibung deaktivieren oder ablehnen

Siehe OVERRIDE_MIN_ASPECT_RATIO.

Property-Flags zum Anpassen der Überschreibung

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

OVERRIDE_ANY_ORIENTATION

Aktiviert die folgenden Überschreibungen, um jede Ausrichtung zu überschreiben:

Wie Apps dasselbe Ergebnis wie eine Überschreibung 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 gehandhabt werden kann: Entweder lassen Sie das System die App zerstören und neu erstellen oder Sie verwalten die Konfigurationsänderungen selbst. Wenn Sie Konfigurationsänderungen selbst verwalten, kann der App-Status mithilfe von ViewModel beibehalten werden. In sehr seltenen Fällen kannst du die Ausrichtung nur auf kleinen Displays sperren. Das ist jedoch möglicherweise nicht so gut skalierbar, wie wenn der Nutzer die App nach Bedarf drehen kann. 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 eingeschränkt, aber nicht auf Geräten mit großen Displays.

Überschreibung deaktivieren oder ablehnen

Setzen Sie das Attribut-Flag PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE auf false.

Property-Flags zum Anpassen der Überschreibung

<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:Mit den Befehlen wird die Überschreibung nur vorübergehend angewendet oder entfernt.

OVERRIDE_ANY_ORIENTATION_TO_USER

Ermöglicht der App, den verfügbaren Platz auf dem Display 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 eine Überschreibung erzielen können

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

  • Setzen Sie das Manifestattribut android:resizeableActivity auf true.

  • Wenn Sie auf kleinen Bildschirmen die Größenanpassung von Apps unterstützen, aber den Mehrfenstermodus 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

Aktivieren Sie die Unterstützung aller Ausrichtungen für Ihre App. Legen Sie im Manifest Ihrer App keine screenOrientation-Spezifikation fest. Unterstütze die Größenänderung von Apps, den Mehrfenstermodus und alle Seitenverhältnisse, indem du das Attribut android:resizeableActivity im Manifest deiner App auf true setzt. Weitere Informationen findest du unter Verschiedene Displaygrößen unterstützen.

Überschreibung deaktivieren oder ablehnen

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 die Hochformatausrichtung 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 eine Überschreibung erzielen können

Weitere Informationen finden Sie unter OVERRIDE_ANY_ORIENTATION.

Apps optimieren

Weitere Informationen finden Sie unter OVERRIDE_ANY_ORIENTATION.

Überschreibung deaktivieren oder ablehnen

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 eine Überschreibung erzielen können

Weitere Informationen finden Sie unter OVERRIDE_ANY_ORIENTATION.

Apps optimieren

Weitere Informationen finden Sie unter OVERRIDE_ANY_ORIENTATION.

Überschreibung deaktivieren oder ablehnen

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.

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 von der Aktivität keine andere feste Ausrichtung angegeben wurde.

Wie Apps dasselbe Ergebnis wie eine Überschreibung erzielen können

Weitere Informationen finden Sie unter OVERRIDE_ANY_ORIENTATION.

Apps optimieren

Weitere Informationen finden Sie unter OVERRIDE_ANY_ORIENTATION.

Überschreibung deaktivieren oder ablehnen

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

OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA

Beschränkt die Überschreibungen OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT, OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR und OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE so, dass sie nur wirksam werden, wenn die Kameraverbindung aktiv ist.

Wie Apps dasselbe Ergebnis wie eine Überschreibung erzielen können

Weitere Informationen finden Sie unter OVERRIDE_ANY_ORIENTATION.

Apps optimieren

Weitere Informationen finden Sie unter OVERRIDE_ANY_ORIENTATION.

Überschreibung deaktivieren oder ablehnen

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_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 Displayausrichtung auf das Querformat, wenn die folgenden Bedingungen erfüllt sind:

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

Wie Apps dasselbe Ergebnis wie eine Überschreibung erzielen können

Nicht zutreffend. Das Problem sollte in der Anwendungslogik gelöst werden.

Apps optimieren

Weitere Informationen finden Sie unter OVERRIDE_ANY_ORIENTATION.

Überschreibung deaktivieren oder ablehnen

Setzen Sie das Attribut-Flag PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE auf false.

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 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:Mit den Befehlen wird die Überschreibung nur vorübergehend angewendet oder entfernt.

OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION

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

Wie Apps dasselbe Ergebnis wie eine Überschreibung erzielen können

Setzen Sie das Attribut-Flag PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION auf true.

Apps optimieren

Weitere Informationen finden Sie unter OVERRIDE_ANY_ORIENTATION.

Überschreibung deaktivieren oder ablehnen

Setzen Sie das Attribut-Flag PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION auf false.

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.

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, wenn eine Aktivität nicht im Letterbox-Format für eine feste Ausrichtung angezeigt wird.

Wie Apps dasselbe Ergebnis wie eine Überschreibung erzielen können

Nicht zutreffend. Das Problem sollte in der Anwendungslogik gelöst werden.

Apps optimieren

Weitere Informationen finden Sie unter OVERRIDE_ANY_ORIENTATION.

Überschreibung deaktivieren oder ablehnen

Setzen Sie das Attribut-Flag PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED auf false.

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:Mit den Befehlen wird die Überschreibung nur vorübergehend angewendet oder entfernt.

OVERRIDE_RESPECT_REQUESTED_ORIENTATION

Schließt Pakete vom Verhalten „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 eine Überschreibung erzielen können

Nicht zutreffend. Das Problem sollte in der Anwendungslogik gelöst werden.

Apps optimieren

Weitere Informationen finden Sie unter OVERRIDE_ANY_ORIENTATION.

Überschreibung deaktivieren oder ablehnen

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

Property-Flags zum Anpassen der Überschreibung

Keine Attribut-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:Mit den Befehlen wird die Überschreibung nur vorübergehend angewendet oder entfernt.

NEVER_SANDBOX_DISPLAY_APIS

Erzwingt, dass für Pakete nie die Display-API-Sandboxing-Funktion für eine Aktivität im Letterbox- oder Größenkompatibilitätsmodus angewendet wird. Die Display-APIs stellen weiterhin die Grenzen des Anzeigebereichs bereit.

Wie Apps dasselbe Ergebnis wie eine Überschreibung erzielen können

Deklariere Aktivitäten als größenveränderbar, indem du entweder das Manifestattribut android:resizeableActivity auf true oder das Metadaten-Flag android.supports_size_changes auf true setzt.

Apps optimieren

Apps, die als vollständig in der Größe anpassbar deklariert sind, sollten sich beim Positionieren von UI-Elementen nie auf die Displaygröße verlassen. Migrieren Sie Ihre App zu aktuellen APIs, die WindowMetrics bieten. Wenn du Jetpack Compose verwendest, kannst du die WindowSizeClass API nutzen, um die Benutzeroberfläche basierend auf der Bildschirmfläche der App auf dem aktuellen Display zu zeichnen. Weitere Informationen finden Sie unter Fenstergrößenklassen verwenden.

Überschreibung deaktivieren oder ablehnen

Keine Deaktivierung möglich. Von verworfenen APIs migrieren.

Property-Flags zum Anpassen der Überschreibung

Keine Attribut-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:Mit den Befehlen wird die Überschreibung nur vorübergehend angewendet oder entfernt.

ALWAYS_SANDBOX_DISPLAY_APIS

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

Wie Apps dasselbe Ergebnis wie eine Überschreibung 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 als vollständig in der Größe anpassbar deklariert sind, sollten sich beim Positionieren von UI-Elementen nie auf die Displaygröße verlassen. Migrieren Sie Ihre App von veralteten APIs zu aktuellen APIs, die WindowMetrics bieten. Siehe WindowMetricsCalculator.

Überschreibung deaktivieren oder ablehnen

Keine Deaktivierung möglich. Von verworfenen APIs migrieren.

Property-Flags zum Anpassen der Überschreibung

Keine Attribut-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:Mit den Befehlen wird die Überschreibung nur vorübergehend angewendet oder entfernt.

OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS

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

Wie Apps dasselbe Ergebnis wie eine Überschreibung erzielen können

Beheben Sie das Problem im Anwendungscode, indem Sie APIs verwenden, die die Grenzen des App-Fensters und die Offsets relativ zum App-Fenster angeben, anstatt die Grenzen des Gerätedisplays und die Offsets relativ zum Gerätedisplay.

Apps optimieren

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

Überschreibung deaktivieren oder ablehnen

Setzen Sie das Attribut-Flag PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS auf false.

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:Mit den Befehlen wird die Überschreibung nur vorübergehend angewendet oder entfernt.

OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION

Deaktiviert die erzwungene Rotation. Verbessert die Nutzerfreundlichkeit einiger Apps.

Wie Apps dasselbe Ergebnis wie eine Überschreibung erzielen können

Setzen Sie das Attribut-Flag PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION auf false.

Apps optimieren

Verlasse dich nicht auf die im Cache gespeicherte Ausrichtung des Kamerasensors oder auf Geräteinformationen. Informationen zur Kamerakompatibilität findest du unter Einführung in den Kamerasucher und Unterstützung für Oberflächen mit anpassbarer Größe in deiner Kamera-App.

Überschreibung deaktivieren oder ablehnen

Setzen Sie das Attribut-Flag PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION auf true.

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 der Überschreibung

So wenden Sie die Überschreibung an, um die erzwungene Rotation zu entfernen:

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:Mit den Befehlen wird die Überschreibung nur vorübergehend angewendet oder entfernt.

OVERRIDE_CAMERA_COMPAT_DISABLE_SIMULATE_REQUESTED_ORIENTATION

Deaktiviert die Simulation der angeforderten Ausrichtung für die Kamera. Verbessert die Nutzerfreundlichkeit einiger Apps.

Wie Apps dasselbe Ergebnis wie eine Überschreibung erzielen können

Setzen Sie das Attribut-Flag PROPERTY_CAMERA_COMPAT_ALLOW_SIMULATE_REQUESTED_ORIENTATION auf false.

Apps optimieren

Verlasse dich nicht auf die im Cache gespeicherte Ausrichtung des Kamerasensors oder auf Geräteinformationen. Informationen zur Kamerakompatibilität findest du unter Einführung in den Kamerasucher und Unterstützung für Oberflächen mit anpassbarer Größe in deiner Kamera-App.

Überschreibung deaktivieren oder ablehnen

Da diese Property die Kompatibilitätsbehandlung deaktiviert, kannst du die Nutzerfreundlichkeit verbessern, indem du Änderungen der dynamischen Displaydrehung, die Sensorausrichtung des Geräts sowie die Fenster- und Vorschaugröße berücksichtigst.

Property-Flags zum Anpassen der Überschreibung

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

adb-Befehle zum Testen der Überschreibung

So wenden Sie die Überschreibung an, um die Simulation der angeforderten Ausrichtung zu entfernen:

adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_SIMULATE_REQUESTED_ORIENTATION <package>

So entfernen Sie die Überschreibung, damit die angeforderte Ausrichtung simuliert werden kann:

adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_SIMULATE_REQUESTED_ORIENTATION <package>

Hinweis:Mit den Befehlen wird die Überschreibung nur vorübergehend angewendet oder entfernt.

OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH

Deaktiviert die Aktualisierung der Aktivität nach einer erzwungenen Drehung. Verbessert die Nutzerfreundlichkeit, wenn die Aktualisierung zu einem Statusverlust in Apps führt.

Wie Apps dasselbe Ergebnis wie eine Überschreibung erzielen können

Setzen Sie das Attribut-Flag PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH auf false.

Apps optimieren

Siehe OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION.

Überschreibung deaktivieren oder ablehnen

Setzen Sie das Attribut-Flag PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH auf true.

Property-Flags zum Anpassen der Überschreibung

<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 Aktivitätsaktualisierung entfernt wird:

adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>

So entfernen Sie die Überschreibung, damit die Aktivität aktualisiert werden kann:

adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>

Hinweis:Mit den Befehlen wird die Überschreibung nur vorübergehend angewendet oder entfernt.

OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE

Sorgt dafür, dass die Pakete, auf die sie angewendet wird, nach der erzwungenen Drehung zur Kamerakompatibilität eine Aktivitätsaktualisierung mit einem onResume() → onPause() → onResume()-Zyklus anstelle eines onResume() → onStop() → onResume()-Zyklus durchführen.

Wie Apps dasselbe Ergebnis wie eine Überschreibung erzielen können

Setzen Sie das Attribut-Flag PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE auf true.

Apps optimieren

Siehe OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION.

Überschreibung deaktivieren oder ablehnen

Setzen Sie das Attribut-Flag PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE auf false.

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 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:Mit den Befehlen wird die Überschreibung nur vorübergehend angewendet oder entfernt.

OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT

Erzwingt, dass die Kameraausgabe auf die entgegengesetzte Ausrichtung zugeschnitten wird, wenn die Kameraausrichtung im Hochformat nicht mit der natürlichen Geräteausrichtung übereinstimmt. Viele Apps können mit dieser Situation nicht umgehen und zeigen sonst gestreckte Bilder an.

Wie Apps dasselbe Ergebnis wie eine Überschreibung erzielen können

Setzen Sie das Attribut-Flag PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT auf true.

Apps optimieren

Siehe OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION.

Überschreibung deaktivieren oder ablehnen

Setzen Sie das Attribut-Flag PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT auf false.

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, die das Zuschneiden der inneren Frontkamera anwendet:

adb shell am compat enable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>

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

adb shell am compat disable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>

Hinweis:Mit den Befehlen wird die Überschreibung 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 gesamten Bildschirms zu erzwingen, und den Datenschutz für Nutzer gefährden, indem sie den Inhalt von Benachrichtigungen offenlegen, die bei der Aufnahme des gesamten Bildschirms, aber nicht bei der Freigabe des App-Bildschirms erfasst werden, sowie alle Apps unabhängig vom Fenstermodus.

Wie Apps dasselbe Ergebnis wie eine Überschreibung erzielen können

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

Apps optimieren

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

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

Überschreibung deaktivieren oder ablehnen

Aufgrund der Bedeutung des Datenschutzes für Nutzer kann diese Überschreibung in Ihrer App nicht deaktiviert oder abgelehnt werden.

Property-Flags zum Anpassen der Überschreibung

Keine.

adb-Befehle zum Testen der Überschreibung

So wenden Sie die Überschreibung an, die die Deaktivierung der Teilfreigabe des Bildschirms durch die App aufhebt (d. h. die Teilfreigabe des Bildschirms aktiviert):

adb shell am compat enable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>

So entfernen Sie die Überschreibung, damit die App die Teilfreigabe des Bildschirms deaktivieren kann:

adb shell am compat disable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>

Hinweis:Mit den Befehlen wird die Überschreibung nur vorübergehend angewendet oder entfernt.

OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS

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

Wie Apps dasselbe Ergebnis wie eine Überschreibung erzielen können

Setzen Sie das Attribut-Flag PROPERTY_COMPAT_ENABLE_FAKE_FOCUS auf true.

Apps optimieren

Sie können dieses Problem vermeiden, wenn Ihre App mehrere Ausrichtungen und Konfigurationsänderungen gut verarbeitet. Sorgen Sie dafür, dass Ihre App alle Geräteformfaktoren und App-Fenstermodi unterstützt, indem Sie die Qualitätsrichtlinien für adaptive Apps befolgen.

Wenn Sie die Unity-Game-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 (Fenstergröße anpassbar) in den Einstellungen für den Android Player aktiviert.

Überschreibung deaktivieren oder ablehnen

Setzen Sie das Attribut-Flag PROPERTY_COMPAT_ENABLE_FAKE_FOCUS auf false.

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.

OVERRIDE_EXCLUDE_CAPTION_INSETS_FROM_APP_BOUNDS

Schließt die Einrückungen der Titelleiste aus den App-Grenzen in der Aktivitätskonfiguration im Desktop-Freiform-Fenster aus. Dadurch wird verhindert, dass obere oder untere UI-Elemente der App von der Titelleiste verdeckt oder abgeschnitten werden, wenn die App die Einrückungen der Titelleiste nicht verarbeitet.

Normalerweise werden die Einzüge der Titelleiste in der Konfiguration nicht von den App-Grenzen ausgeschlossen. Configuration.screenHeightDp und die App-Grenzen geben die volle Fensterhöhe an, einschließlich des Bereichs hinter der Titelleiste des Desktop-Freiform-Fensters (die Titelleiste mit den Steuerelementen zum Minimieren, Maximieren und Schließen, die auch im immersiven Modus sichtbar bleibt):

  • Randlose oder immersive Apps, die keine Einrückungen für die Titelleiste verarbeiten:Der Layoutbereich der App erstreckt sich über das gesamte Fenster. Wenn die App also nicht WindowInsets abfragt, um ihre Benutzeroberfläche zu verschieben, können die oberen Steuerelemente direkt unter der Titelleiste gezeichnet werden.
  • Apps, bei denen die Einzüge der Titelleiste vom System erzwungen werden:Damit die App nicht hinter der Titelleiste angezeigt wird, verschiebt das System die Stammansicht der App unter die Titelleiste. Wenn die App ihr Layout anhand der nicht angepassten Configuration.screenHeightDp oder App-Grenzen und nicht anhand der Abmessungen des Darstellungsbereichs dimensioniert, wird ein Layout mit voller Fensterhöhe gerendert, das unter der Titelleiste beginnt. Dadurch werden die unteren UI-Elemente über den unteren Rand des Fensters hinaus verschoben und die Berührungszielbereiche falsch ausgerichtet.

Wenn die Überschreibung aktiviert ist, subtrahiert das System die Höhe der Titelleiste von den App-Grenzen und Configuration.screenHeightDp, sodass der Layoutbereich der App mit dem Bereich unter der Titelleiste übereinstimmt.

Wie Apps dasselbe Ergebnis wie eine Überschreibung erzielen können

Randlose Anzeige aktivieren. Weitere Informationen finden Sie hier:

Apps optimieren

Sie können dieses Problem vermeiden, indem Sie in Ihrer App die randlose Anzeige aktivieren.

Überschreibung deaktivieren oder ablehnen

Setzen Sie das Attribut-Flag PROPERTY_COMPAT_ALLOW_EXCLUDE_CAPTION_INSETS auf false.

Property-Flags zum Anpassen der Überschreibung

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

adb-Befehle zum Testen der Überschreibung

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:Mit den Befehlen wird die Überschreibung nur vorübergehend angewendet oder entfernt.

Zusätzliche Ressourcen


  1. Ein virtueller Geräteinhaber ist eine vertrauenswürdige oder privilegierte App, die ein virtuelles Gerät verwaltet. Inhaber virtueller Geräte erstellen virtuelle Geräte, um Apps zu rendern und sie dann auf Remote-Geräte wie PCs, Virtual-Reality-Geräte oder Infotainmentsysteme in Autos zu projizieren. Der Inhaber des virtuellen Geräts verwendet ein lokales Gerät, z. B. ein Smartphone. ↩