Gerätekompatibilitätsmodus

Android aktiviert einen Kompatibilitätsmodus für Apps, die Einschränkungen bei der Ausrichtung oder Größenanpassung deklarieren. Der Kompatibilitätsmodus sorgt für ein akzeptables Verhalten der App auf Geräten mit großen Bildschirmen und faltbaren Klapphandys, bei nicht optimaler Nutzerfreundlichkeit.

Mit Überschreibungen pro App können Gerätehersteller das App-Verhalten ändern, um die Nutzerfreundlichkeit zu verbessern oder zu verhindern, dass Apps auf bestimmten Geräten funktionieren.

Referenzgeräte

Für die folgenden Geräte sind Überschreibungen pro App aufgrund ungewöhnlicher Konfigurationen oder Konfigurationen erforderlich, die von Apps nicht gut unterstützt werden:

  • Tablets:Einige Tablets, z. B. Pixel Tablet, sind normalerweise im Querformat ausgerichtet. Ein Gerät befindet sich in der 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-Layout und Kameravorschau nicht zum Gerätedisplay passen.
  • Faltbare Geräte im Querformat:Einige faltbare Geräte wie Pixel Fold werden zugeklappt im Hochformat und aufgeklappt im Querformat angezeigt. Wenn Apps davon ausgehen, dass die ausgeklappte Ausrichtung im Hochformat ist, kann es zu flackernden Schleifen oder Layoutproblemen kommen.
  • Faltbare Klapphandys:Aufgeklappte Klapphandys sind normalerweise im Hochformat zu sehen. Zugeklappt haben die Smartphones jedoch meist ein kleines Display im Querformat. Apps müssen die verschiedenen Ausrichtungen der Bildschirme identifizieren und berücksichtigen.

Häufige Kompatibilitätsprobleme

Kompatibilitätsprobleme bei Apps treten am häufigsten aufgrund von Einschränkungen bei der App-Ausrichtung, Größenänderungs- und Seitenverhältnissen, einer falschen Ausrichtung der Kameravorschau und falsch verwendeten APIs auf.

Letterboxing

Mit Letterboxing-Balken wird die App in der Mitte des Bildschirms oder bei großen Bildschirmen auf eine Seite oder die andere Seite positioniert, um einen bequemen Zugriff zu ermöglichen. Mattes (einfarbige Balken oder weichgezeichneter Hintergrund) füllen den nicht verwendeten Anzeigebereich an den Seiten oder am oberen und unteren Rand der App aus.

Das Letterbox-Bild tritt häufig auf Geräten mit großen Bildschirmen auf, da sich die Abmessungen und das Seitenverhältnis des Gerätedisplays in der Regel von denen von Standardhandys unterscheiden, für die die meisten Apps entwickelt wurden.

Abbildung 1: Die App, die auf das Hochformat beschränkt ist, wird auf Tablets im Querformat und auf faltbaren Geräten im Letterbox-Format dargestellt.

Problem

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

Zu den Konfigurationseinstellungen, mit denen die Ausrichtung und Größenanpassung der App gesteuert wird, 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 so anpassen kann, dass sie in Fenster mit unterschiedlichen Abmessungen passen. Gibt unter Android 11 (API-Level 30) und niedriger an, ob Apps den Mehrfenstermodus unterstützen. Gibt unter Android 12 (API-Level 31) und höher an, ob Apps den Mehrfenstermodus auf kleinen Bildschirmen (sw < 600 dp) unterstützen. Ab Android 12 unterstützen Apps den Mehrfenstermodus auf großen Bildschirmen (mindestens 600 dp) 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, in denen resizeableActivity auf false festgelegt ist.

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

Optimierung

Die App sollte alle Bildschirmausrichtungen und -größen im Geräte- und Mehrfenstermodus unterstützen. Entfernen Sie alle Einschränkungen hinsichtlich der Ausrichtung und des Seitenverhältnisses aus Ihren App-Layouts und der App-Manifest-Datei.

Kompatibilitäts-Problemumgehung

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

Ab Android 12 (API-Level 31) und 12L (API-Level 32) wendet die Plattform eine Vielzahl von Verbesserungen an Apps im Letterbox-Format an. Gerätehersteller implementieren die Verbesserungen der Benutzeroberfläche. Sie müssen nichts weiter unternehmen, 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 werden jetzt noch übersichtlicher.
  • Transparenz der Systemleiste:Status- und Navigationsleisten, die die App überlagern, sind halbtransparent. Symbole auf den Balken sind also immer über dem Letterbox-Hintergrund sichtbar.
  • Konfigurierbares Seitenverhältnis:Das Seitenverhältnis der App kann angepasst werden, um das Erscheinungsbild der App zu verbessern.

Abbildung 2: App mit Letterbox-Bild und verbesserter Benutzeroberfläche

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

  • Konfigurierbare Positionierung:Auf großen Bildschirmen können Gerätehersteller die App links oder rechts vom Bildschirm positionieren, um die Interaktion zu erleichtern.

  • Neu gestaltete Neustart-Schaltfläche: Gerätehersteller können die Schaltfläche zum Neustart für den Größenkompatibilitätsmodus neu gestalten, damit sie von den Nutzern besser erkannt wird.

Unter Android 13 (API-Level 33) wird ein Dialogfeld mit Informationen zur Platzierung der App mit Letterbox-Bild auf dem Bildschirm oder zum Einbeziehen des Letterbox-Bilds im Splitscreen-Modus für Nutzer hinzugefügt:

Abbildung 3: App mit Letterbox-Bild und Dialogfeld mit Informationen für Nutzer

Größenkompatibilitätsmodus

Der Größenkompatibilitätsmodus ist das Letterbox-Verfahren, das ein Steuerelement für den Neustart enthält. Über das 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 Anzeigecontainer verschoben wird, der nicht mit den Abmessungen der Aktivität kompatibel ist, skaliert das System die App möglicherweise neu, um die Geräteanzeige mindestens in einer Dimension auszufüllen.

Zu den Änderungen an der Gerätekonfiguration, die den Größenkompatibilitätsmodus auslösen können, gehören:

  • Bildschirm drehen
  • Faltbares Gerät auf- oder zuklappen
  • Zwischen Vollbildmodus und Splitscreen wechseln

Problem

Der Größenkompatibilitätsmodus gilt in der Regel für Aktivitäten, bei denen die Ausrichtung oder das Seitenverhältnis eingeschränkt und die Konfiguration (oder vom System) so konfiguriert ist, dass die Größe nicht geändert werden kann.

Es wird davon ausgegangen, dass Ihre Anwendung in der Größe angepasst werden kann, wenn sie eines der folgenden Kriterien erfüllt. Es wird nicht in den Größenkompatibilitätsmodus aufgenommen:

Wenn Ihre App keine dieser Bedingungen erfüllt, kann die Größe nicht angepasst werden. In diesem Fall kann die App in den Größenkompatibilitätsmodus versetzt werden.

Optimierung

Die App sollte alle Displaygrößen unterstützen. Du kannst die Größe der App anpassen, indem du das Attribut android:resizeableActivity des Elements <activity> oder <application> im App-Manifest auf true setzt. Entwerfen Sie responsive/adaptive Layouts für Ihre App. Weitere Informationen finden Sie unter Unterstützung verschiedener Bildschirmgrößen und Unterstützung für den Mehrfenstermodus.

Kompatibilitäts-Problemumgehung

In Android wird eine App in den Größenkompatibilitätsmodus versetzt, wenn das System feststellt, dass die Darstellung der App mit Letterbox-Bild durch eine Neuskalierung der App so skaliert werden kann, dass das Anzeigefenster in mindestens einer Dimension ausgefüllt wird. Das System zeigt eine Steuerung für den Neustart an, mit der der Anwendungsprozess, die Aktivität und die Anzeige neu erstellt werden. Siehe auch Übersicht über Prozesse und Threads.

Flackernde Schlaufen

Wenn eine App nicht alle Bildschirmausrichtungen unterstützt, fordert sie bei einer Konfigurationsänderung möglicherweise wiederholt eine neue Ausrichtung an. Dadurch entsteht eine Endlosschleife, durch die das Display flackert oder die App endlos gedreht wird.

Problem

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

Wenn die Ausrichtungsbeschränkungen einer App ignoriert werden, kann sie programmatisch durch Aufrufen von Activity#setRequestedOrientation() festgelegt werden. Der Aufruf löst einen App-Neustart aus, wenn die App keine Konfigurationsänderungen verarbeitet (siehe Konfigurationsänderungen verarbeiten). Nach dem Neustart werden die Ausrichtungsbeschränkungen der App wieder ignoriert, die App wiederholt den Aufruf von setRequestedOrientation(), der Aufruf löst einen App-Neustart aus und so weiter in einer sich selbstständigen Schleife.

Eine andere Möglichkeit ist, wenn die natürliche Ausrichtung (die von Android festgelegte normale Ausrichtung) eines Gerätebildschirms im Querformat ist (d. h. beim Aufrufen von Display#getRotation() wird Surface.ROTATION_0 zurückgegeben, während das Gerät ein Querformat hat). Bisher wurde in Apps davon ausgegangen, dass Display.getRotation() = Surface.ROTATION_0 bedeutet, dass sich das Gerät im Hochformat befindet. Dies 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 faltbaren inneren Display kann die Bildschirmdrehung prüfen, den Wert ROTATION_0 erhalten, davon ausgehen, dass die natürliche Ausrichtung des Geräts im Hochformat ist, und setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT ) aufrufen, um das App-Layout neu zu konfigurieren. Nach dem Neustart der Anwendung (im Querformat) kann sie die Bildschirmdrehung noch einmal prüfen, den Wert ROTATION_0 erhalten, setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) aufrufen und die Endlosschleife fortsetzen.

Optimierung

Folgendes sollte in Apps nicht ausgeführt werden:

  • Legen Sie in der Methode onCreate() der Aktivität mit Activity#setRequestedOrientation() eine Standardausrichtung fest, da die Ausrichtungsanfrage unerwartet durch unbehandelte Konfigurationsänderungen ausgelöst werden kann.
  • Ausgehend von der natürlichen Ausrichtung des Geräts (ROTATION_0) im Hochformat annehmen
  • Legen Sie die Ausrichtung anhand von Signalen fest, die nicht mit der aktuellen Fenstergröße zusammenhängen, z. B. Display#getRotation(), das Vorhandensein einer FoldingFeature oder verworfene APIs.

Kompatibilitäts-Problemumgehung

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

  • Die Aktivität wurde bereits aus einem vorherigen Aufruf der Methode neu gestartet oder die kompatible Kamerarotationsbehandlung wurde aktiviert (siehe Kameravorschau unten).

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

  • Die Aktivität hat mehr als zwei Ausrichtungsanfragen in einer Sekunde gesendet, was darauf hindeutet, dass eine Schleife aufgetreten ist. Von den beiden Anfragen in der Schleife 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.

Kameravorschau

Die Kameravorschau (oder der Sucher) von Kamera-Apps kann auf Tablets, Laptops und faltbaren Displays falsch ausgerichtet oder verzerrt sein.

Problem

Im Android Compatibility Definition Document ist festgelegt, dass ein Kamera-Bildsensor "MÜSSEN so ausgerichtet werden muss, dass die lange Seite der Kamera mit der des Bildschirms übereinstimmt".

Apps gehen oft davon aus, dass die Geräteausrichtung und die Ausrichtung des Kamerasensors im Hochformat gehalten werden – eine vernünftige Annahme für Standard-Smartphones. Die natürliche Ausrichtung von Tablets und Laptops sowie ihrer Kamerasensoren kann jedoch im Querformat sein. Außerdem können neue Formfaktoren wie faltbare Smartphones mehrere natürliche Ausrichtungen und mehrere Kamerasensoren mit unterschiedlicher Ausrichtung haben.

Wenn du eine Aktivität mit einer von der App erwarteten Kameraausrichtung startest oder zwischen verschiedenen Kameras oder Gerätebildschirmen (bei faltbaren Geräten) wechselt, 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 identifizieren und verwalten, damit eine korrekt ausgerichtete und skalierte Kameravorschau angezeigt wird. Apps müssen die Gerätedrehung, die Sensordrehung und das Bildschirm- oder Fensterseitenverhältnis berechnen und dann die Ergebnisse auf die Kameravorschau anwenden. Detaillierte Informationen finden Sie unter Kameravorschau und Einführung in den Kamerasucher.

Kompatibilitäts-Problemumgehung

Ein Gerät befindet sich in natürlicher Ausrichtung, wenn Display#getRotation() Surface.ROTATION_0 zurückgibt. Das System berechnet CameraCharacteristics.SENSOR_ORIENTATION anhand der natürlichen Ausrichtung des Geräts. Android richtet das Fenster im Hochformat von Apps im Hochformat an die natürliche Ausrichtung des Geräts aus, was die meisten Apps erwarten. Android schneidet das Kamerasensorbild auch zu, wenn die Sensorausrichtung im Querformat und die Kameravorschau im Hochformat ist. So können Sie das Problem umgehen:

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

    Wenn eine App mit eingeschränktem Hochformat mit der Kamera verbunden ist, dreht Android die App, um das Fenster im Hochformat der App an die natürliche Ausrichtung des Geräts auszurichten.

    Auf einigen Tablets (siehe Referenzgeräte) wird das Fenster im Hochformat der App in das Vollbild-Hochformat gedreht, um es an die natürliche Ausrichtung des Geräts anzupassen. Die App belegt nach der erzwungenen Rotation im Vollbildmodus.

    Auf dem inneren Display von faltbaren Geräten im Querformat (siehe Referenzgeräte) werden Aktivitäten im Hochformat in das Querformat gedreht, damit es der aufgeklappten natürlichen Ausrichtung entspricht. Die Anwendung wird nach der erzwungenen Drehung mit Letterbox-Balken versehen.

  • Innerer Frontkamera zuschneiden:Der Sensor der inneren Frontkamera befindet sich bei einigen faltbaren Smartphones im Querformat. Zusätzlich zur erzwungenen Drehung der Kameravorschau auf dem faltbaren inneren Display schneidet Android das Sichtfeld der inneren Frontkamera (Querformat) so ab, dass der Sensor das Sichtfeld der Geräteausrichtung entgegennimmt.

  • Aktualisierung der Kameravorschau erzwingen:Nach der erzwungenen Drehung durchläuft das System die Aktivitätsmethoden onStop() und onStart() (standardmäßig) oder onPause() und onResume() (durch die Überschreibung pro App OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE angewendet), um sicherzustellen, dass die Kameravorschau richtig angezeigt wird.

  • Seitenverhältnisskalierung:Das System ändert das Seitenverhältnis der erzwungenen gedrehten Kameravorschau dynamisch auf ein höheres minimales Seitenverhältnis. Dadurch wird sichergestellt, dass die Kameravorschau richtig skaliert wird.

App-Entwickler können diese Problemumgehungen überschreiben, wenn die Apps die Kameravorschau korrekt verarbeiten. Siehe Überschreibungen pro App.

Häufig missbrauchte APIs

Da Android Funktionen wie den Mehrfenstermodus und Geräte wie faltbare Geräte unterstützt, wurden Legacy-APIs eingestellt und durch aktuelle APIs ersetzt, die für alle Displaygrößen und Geräteformfaktoren funktionieren. Die verworfenen APIs sind jedoch aus Gründen der Abwärtskompatibilität weiterhin verfügbar.

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

Problem

Entwickler verwenden weiterhin eingestellte Display APIs und gehen fälschlicherweise davon aus, dass die APIs die App-Grenzen anstelle der Grenzen des Anzeigebereichs der Geräte zurückgeben. Oder Entwickler verwenden fälschlicherweise Anzeige-APIs für spezielle Zwecke, um allgemeine Anzeigemesswerte abzurufen. Dies führt zu Fehlkalkulationen bei der Neupositionierung von UI-Elementen nach Größenänderungsereignissen des App-Fensters, was zu Layoutproblemen führt.

Eingestellte und häufig missbrauchte Display-APIs:

Weitere Informationen finden Sie unter Unterstützung des Mehrfenstermodus.

Falsch verwendete Ansichts-APIs:

Optimierung

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

Kompatibilitäts-Problemumgehung

Mit zwei Überschreibungen werden die verworfenen Display APIs und die missbrauchten View APIs angepasst, um die Anwendungsgrenzen zurückzugeben: ALWAYS_SANDBOX_DISPLAY_APIS für Display APIs und OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS für View APIs. ALWAYS_SANDBOX_DISPLAY_APIS wird außerdem standardmäßig auf Apps angewendet, die für den Größenkompatibilitätsmodus infrage kommen.

Transparente Aktivitäten

Transparente Aktivitäten sind das Ergebnis transparenter Hintergrundstile. Beispiele:

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

Designs für Dialogfelder, z. B. Theme.MaterialComponents.Dialog, können Stile enthalten, mit denen Aktivitäten transparent gemacht werden.

Transparente Aktivitäten decken nicht den gesamten verfügbaren Anzeigebereich ab, was ihre Verwaltung erschwert, da sich der verfügbare Anzeigebereich aufgrund von Konfigurationsänderungen wie Gerätedrehung, aus- und aufklappenem Gerät und Mehrfenstermodus ändern kann.

Problem

Eine transparente Aktivität sollte den Grenzen der ersten undurchsichtigen Aktivität unter der transparenten Aktivität im Aufgaben-Aktivitätsstack entsprechen. Eine intransparente Aktivität, die einen Berechtigungsdialog startet, kann jedoch ein Trampolin sein (eine Aktivität, die eine andere Aktivität startet, dann verschwindet). Daher kann das System die Grenzen der Trampolinaktivität, durch die die transparente Berechtigungsdialogaktivität gestartet wurde, nicht bestimmen.

Optimierung

Transparente Aktivitäten übernehmen ihre Einschränkungen von der höchsten undurchsichtigen Aktivität, die ihnen im Aktivitätspaket einer Aufgabe untergeordnet ist. Die opake Aktivität muss für den gesamten Lebenszyklus der transparenten Aktivität verfügbar sein, von der Erstellung bis zum Löschen der Aktivität. Daher solltest du keine Berechtigungsanfragen von Trampolinaktivitäten stellen.

Wenn eine Trampolinaktivität eine Berechtigungsanfrage startet, kann der Nutzer das Berechtigungsdialogfeld möglicherweise nicht sehen, da die Trampolinaktivität gelöscht wurde, bevor er auf das Dialogfeld antworten konnte, und die Abmessungen und die Position der Dialogaktivität wurden möglicherweise falsch berechnet.

Apps sollten immer Berechtigungsanfragen von Aktivitäten starten, die sichtbar bleiben, bis der Nutzer eine Berechtigungsentscheidung getroffen hat.

Abgerundete Ecken

Eine Aktivität kann aufgrund eines Stils, der die Hintergrundtransparenz angibt, transparent sein. Es kann auch sein, dass der Inhalt der Aktivität den verfügbaren Anzeigebereich nicht füllt. Wenn eine transparente Aktivität den verfügbaren Platz ausfüllt, wendet das System automatisch abgerundete Ecken auf die Aktivität an, sofern vom Gerätehersteller entsprechend konfiguriert. Wenn jedoch eine transparente Aktivität (z. B. ein Berechtigungsdialog) den verfügbaren Platz nicht ausfüllt, müssen Sie entscheiden, ob Sie abgerundete Ecken verwenden möchten.

Berechtigungsdialogfelder füllen den verfügbaren Platz nicht aus, da für das Dialogfeldlayout normalerweise LayoutParams.WRAP_CONTENT und nicht LayoutParams.MATCH_PARENT verwendet wird.

Kompatibilitäts-Problemumgehung

Aktivitäten zum Starten von Dialogaktivitäten sollten sichtbar bleiben, bis der Nutzer auf das Dialogfeld geantwortet hat.

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

  • Größenkompatibilitätsmodus
  • Ausrichtung
  • Seitenverhältnis

Unity-Spiele

Unity-Spiele laufen auf Android-Geräten im Vollbildmodus oder im Mehrfenstermodus. Viele Unity-Spiele verlieren jedoch den Fokus und beenden das Zeichnen von Inhalten, wenn sich die App im Mehrfenstermodus befindet.

Problem

Unity hat in Unity 2019.4 eine Resizable Window-Option hinzugefügt, um den Mehrfenstermodus unter Android zu unterstützen. Die ursprüngliche Implementierung hat jedoch nicht richtig auf den Aktivitätslebenszyklus im Mehrfenstermodus reagiert, was dazu führte, dass UnityPlayer die Wiedergabe anhält, wenn die App den Fokus verliert. Der Spieler renderte einen schwarzen Bildschirm oder den letzten, eingefrorenen Frame des Spiels. Das Spiel wurde erst fortgesetzt, wenn der Nutzer auf den Bildschirm tippt. Viele Anwendungen, die die Unity-Engine verwenden, sind mit diesem Problem konfrontiert und werden im Mehrfenstermodus als schwarzes Fenster gerendert.

Optimierung

Führe ein Upgrade von Unity auf Version 2019.4.40 oder höher durch und exportiere dein Spiel noch einmal. Lassen Sie die Option Resizable Window in den Android Player-Einstellungen aktiviert. Andernfalls wird das Spiel angehalten, wenn es nicht im Fokus ist, obwohl das Spiel im Mehrfenstermodus vollständig sichtbar ist.

Kompatibilitäts-Problemumgehung

Gerätehersteller können die Überschreibung OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS pro App anwenden, um einer App im Mehrfenstermodus ein falsches Fokusereignis bereitzustellen. Die Überschreibung ermöglicht es der Aktivität, Inhalte neu zu zeichnen, ohne geschwärzt zu werden.

App auf Kompatibilitätsprobleme testen

Nutzen Sie die folgenden Ressourcen, um Ihre Anwendung zu testen und zu verstehen, wie sie sich bei verschiedenen Formfaktoren verhält:

Mit Letterbox-Bild

Überprüfen Sie, ob für jede Aktivität der gesamte für die App verfügbare Anzeigeraum genutzt werden kann. Geben Sie zuerst den folgenden Code in Ihrem Testordner an:

Kotlin

fun Activity.isLetterboxed() : Boolean {
    if (isInMultiWindowMode) return false

    val wmc = WindowMetricsCalculator.getOrCreate()
    val currentBounds = wmc.computeCurrentWindowMetrics(this).bounds
    val maxBounds = wmc.computeMaximumWindowMetrics(this).bounds

    val isScreenPortrait = maxBounds.height() > maxBounds.width()

    return if (isScreenPortrait) {
        currentBounds.height() < maxBounds.height()
    } else {
        currentBounds.width() < maxBounds.width()
    }
}

Java

public boolean isLetterboxed(Activity activity) {
    if (activity.isInMultiWindowMode()) {
        return false;
    }

    WindowMetricsCalculator wmc = WindowMetricsCalculator.getOrCreate();
    Rect currentBounds = wmc.computeCurrentWindowMetrics(activity).getBounds()
    Rect maxBounds = wmc.computeMaximumWindowMetrics(activity).getBounds();

    boolean isScreenPortrait = maxBounds.height() > maxBounds.width();

    return (isScreenPortrait)
        ? currentBounds.height() < maxBounds.height()
        : currentBounds.width() < maxBounds.width();
}

Führen Sie dann einen Test aus, um das Verhalten zu bestätigen, und achten Sie darauf, dass die Zielaktivität keine Letterbox-Daten enthält:

Kotlin

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

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

Java

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

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

Idealerweise sollten Sie diese Art von Test nur so lange ausführen, bis die Aktivitäten Ihrer App den gesamten für die App verfügbaren Platz einnehmen. Testen Sie Ihre App auf allen Gerätetypen, um für ein einheitliches Verhalten zu sorgen.

Überschreibungen pro App

Android bietet Überschreibungen, die das konfigurierte Verhalten von Apps ändern. Die Überschreibung FORCE_RESIZE_APP weist das System beispielsweise an, den Größenkompatibilitätsmodus zu umgehen und die App an die Displayabmessungen anzupassen, auch wenn resizeableActivity="false" im App-Manifest angegeben ist.

Gerätehersteller wenden Überschreibungen auf bestimmte Apps – oder alle Apps – auf bestimmten Geräten mit großen Bildschirmen an. Unter Android 14 (API-Level 34) und höher können Nutzer über die Geräteeinstellungen Überschreibungen auf Apps anwenden.

Überschreibungen für Nutzer pro App

Unter Android 14 und höher können Nutzer über ein Einstellungsmenü das Seitenverhältnis von Apps ändern. Geräte mit großen Bildschirmen wie die Referenzgeräte implementieren das Menü.

Das Menü enthält eine Liste aller auf dem Gerät installierten Apps. Nutzer wählen eine App aus und legen dann das Seitenverhältnis der App auf 3:4, 1:1, Vollbild oder einen anderen vom Gerätehersteller konfigurierten Wert fest. Nutzer können das Seitenverhältnis auch auf die Standardeinstellung der App zurücksetzen, die im App-Manifest festgelegt ist.

Apps können die Kompatibilitätsüberschreibung deaktivieren, indem Sie die folgenden PackageManager.Property-Tags festlegen:

  • PROPERTY_KOMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE

    Wenn Sie die Überschreibung der Kompatibilität mit dem Seitenverhältnis des Nutzers deaktivieren möchten, fügen Sie das Attribut Ihrem App-Manifest hinzu und legen Sie den Wert auf false fest:

    <application>
        <property
            android:name="android.window.
            PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE"
            android:value="false" />
    </application>
    

    Ihre App wird aus der Liste der Apps in den Geräteeinstellungen ausgeschlossen. Nutzer können das Seitenverhältnis der App nicht überschreiben.

    Das Festlegen des Attributs auf true hat keine Auswirkungen.

  • PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_FULLSCREEN_OVERRIDE

    Wenn Sie die Vollbildoption der Überschreibung des Nutzer-Seitenverhältnisses deaktivieren möchten, fügen Sie die Property Ihrem App-Manifest hinzu und legen Sie den Wert auf false fest:

    <application>
        <property
            android:name="android.window.PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_FULLSCREEN_OVERRIDE"
            android:value="false" />
    </application>
    

    Die Option „Vollbild“ wird aus der Liste der Seitenverhältnisoptionen in den Geräteeinstellungen entfernt. Nutzer können die Vollbildüberschreibung nicht auf Ihre App anwenden.

    Das Festlegen dieses Attributs auf true hat keine Auswirkungen.

App für alle Bildschirme optimieren:Legen Sie in Ihrer App keine Seitenverhältnisbeschränkungen fest. Verwenden Sie Fenstergrößenklassen, um verschiedene Layouts je nach verfügbarem Anzeigebereich zu unterstützen.

Überschreibungen pro App des Geräteherstellers

Gerätehersteller wenden Überschreibungen für einzelne Apps auf ausgewählten Geräten an. Die Referenzgeräte können einige der Überschreibungen standardmäßig auf eine Vielzahl von Apps anwenden.

Für Apps können die meisten Überschreibungen deaktiviert werden (siehe Tabelle Überschreibungen pro App unten).

Sie können Ihre App mit aktivierten oder deaktivierten Überschreibungen testen. Verwenden Sie dazu das Kompatibilitäts-Framework (siehe Kompatibilitäts-Framework-Tools). Wenn diese Option aktiviert ist, gelten Überschreibungen für die gesamte App.

Sie können auch Android Debug Bridge (ADB) verwenden, um Überschreibungen zu aktivieren oder zu deaktivieren und zu bestimmen, 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 bei den Referenzgeräten, welche Überschreibungen für Ihre App gelten:

adb shell dumpsys platform_compat | grep <package name>

In der folgenden Tabelle sind die verfügbaren Überschreibungen zusammen mit einer Anleitung zur Optimierung Ihrer Anwendung aufgeführt, damit sie nicht auf Überschreibungen angewiesen ist. Sie können Ihrem App-Manifest Attribut-Flags hinzufügen, um einige Überschreibungen zu deaktivieren.

Überschreibungen pro App
Typ Name ID Beschreibung
Größenanpassung FORCE_RESIZE_APP 174042936 Umgeht den Größenkompatibilitätsmodus für die App bei Konfigurationsänderungen.
FORCE_NON_RESIZE_APP 181136395 Erzwingt die App bei Konfigurationsänderungen in den Größenkompatibilitätsmodus.
Seitenverhältnis OVERRIDE_MIN_ASPECT_RATIO 174042980 Gatekeeper-Überschreibung, die aktiviert werden muss, um andere Seitenverhältnisüberschreibungen anzuwenden.
OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY 203647190 Wenn diese Option aktiviert ist (Standardeinstellung), wird der Überschreibungsbereich auf Aktivitäten beschränkt, die nur im Hochformat möglich sind.
OVERRIDE_MIN_ASPECT_RATIO_MEDIUM 180326845 Ändert das Mindestseitenverhältnis in 3:2.
OVERRIDE_MIN_ASPECT_RATIO_LARGE 180326787 Ändert das Mindestseitenverhältnis in 16:9.
OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN 208648326 Ändert das Mindestseitenverhältnis, sodass es für 50% der Bildschirmgröße passt (oder das Seitenverhältnis im geteilten Bildschirm).
OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN 218959984 Hiermit wird die Überschreibung des Mindestseitenverhältnisses deaktiviert, sodass Apps im Hochformat angezeigt werden.
Ausrichtung OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT 265452344 Wenn eine Aktivität eine nicht definierte Ausrichtung hat, wird das Hochformat als Ausrichtung überschrieben.
OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR 265451093 Wenn eine Aktivität eine nicht definierte Ausrichtung hat, wird die Ausrichtung mit nosensor überschrieben (natürliche Ausrichtung des Geräts verwenden).
OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE 266124927 Dreht sich nur Apps im Querformat um 180 Grad.
OVERRIDE_ANY_ORIENTATION 265464455 Ermöglicht das Überschreiben einer Ausrichtung.
OVERRIDE_ORIENTATION_ONLY_FOR_KAMERA 265456536 Beschränkt den Bereich zum Überschreiben der Ausrichtung auf den Bereich, wenn die App mit der Kamera verbunden ist.
OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION 255940284 Setzt die Anzeige auf eine feste, natürliche Ausrichtung im Querformat, wenn eine Aufgabe im Vollbildmodus angezeigt wird (auch im Letterbox-Format).
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION 254631730 Ignoriert Ausrichtungsanfragen von der App, um Endlosschleifen für die Drehung zu vermeiden.
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED 273509367 Ignoriert wiederholte Ausrichtungsanfragen, während eine Aktivität neu gestartet wird. Wenn Android erkennt, dass eine App innerhalb einer Sekunde mindestens zwei Neuausrichtungen anfordert, betrachtet das System dies als Endlosschleife und wendet die Überschreibung an.
OVERRIDE_RESPECT_REQUESTED_ORIENTATION 236283604 Verhindert Letterbox-Bild, indem die Einstellung zum Ignorieren der Ausrichtungsanfrage durch den Gerätehersteller deaktiviert wird.
Sandbox-APIs NEVER_SANDBOX_DISPLAY_APIS 184838306 Verhindert eine Änderung des Verhaltens von Display-APIs.
ALWAYS_SANDBOX_DISPLAY_APIS 185004937 Erzwingt, dass die Display APIs in der App App-Grenzen zurückgeben. Display-APIs geben logische Darstellungsbereichgrenzen zurück, aber manchmal geht die App 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 Darstellungsbereichgrenzen zurück, aber manchmal geht die App davon aus, dass View-APIs App-Grenzen zurückgeben, was zu Problemen mit der Benutzeroberfläche führt.
Kamerakompatibel OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION 263959004 Deaktiviert die erzwungene Drehung. Standardmäßig werden alle Kamera-Apps mit fester Ausrichtung erzwungen, wenn die Kameravorschau geöffnet ist.
OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH 264304459 Die standardmäßige Hartaktualisierung, die angewendet wird, wenn eine Kameravorschau erzwungen wird, wird entfernt.
OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE 264301586 Schaltet die feste Aktualisierung auf eine weiche Aktualisierung um, wenn eine Kameravorschau erzwungen wird. Dadurch wird der Zustand während der erzwungenen Drehung beibehalten. Standardmäßig führt Android eine vollständige Aktualisierung durch, wenn die Kameravorschau erzwungen wird. Die vollständige Aktualisierung kann dazu führen, dass Apps den Status verlieren oder schwärzen, je nachdem, wie die Apps ihren vorherigen Status im Cache gespeichert haben.
OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT 250678880 Beschneidet den Bildpuffer der inneren Frontkamera. Ist das Überschreiben deaktiviert, wird der Zuschnitt der inneren Frontkamera entfernt und das Sichtfeld der Kameravorschau wird vergrößert. Auf einigen faltbaren Geräten (siehe Referenzgeräte) wird die Kameravorschau aller Kamera-Apps standardmäßig zugeschnitten, wenn die innere Frontkamera verwendet wird.
Sonstiges OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS 263259275 Verhindert, dass die App geschwärzt wird, wenn sie im Splitscreen-Modus den Fokus verliert. Die App wartet auf den Fokus, bevor sie den App-Inhalt zeichnet. Dies kann dazu führen, dass die App einfriert oder geschwärzt wird. Die Überschreibung ermöglicht es Android, ein falsches Fokusereignis an die App zu senden, das der App signalisiert, wieder mit dem Zeichnen von Inhalten zu beginnen.

APP_RESIZE_APP_ERZIEHEN

Erzwingt, dass die Größe der Pakete, auf die die Überschreibung angewendet wird, geändert werden kann. Dadurch wird nicht geändert, ob die App in den Mehrfenstermodus versetzt werden kann. Die App kann jedoch ihre Größe anpassen, ohne in den Größenkompatibilitätsmodus zu wechseln, wenn die Bildschirmgröße angepasst wird.

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

Legen Sie im App-Manifest entweder das Attribut android:resizeableActivity auf true fest oder setzen Sie das Metadaten-Flag android.supports_size_changes auf true, um die Größe anzupassen und gleichzeitig den Mehrfenstermodus mit android:resizeableActivity=false zu deaktivieren.

Apps optimieren

Verwende responsive/adaptive Layouts, damit sich Apps an alle Displaygrößen und Seitenverhältnisse anpassen können. Siehe Unterstützung verschiedener Bildschirmgrößen.

Überschreiben deaktivieren oder deaktivieren

Legen Sie das Attribut-Flag PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES auf false fest.

Property-Flags zum Anpassen der Überschreibung

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

ADB-Befehle zum Testen der Überschreibung

So wenden Sie die Überschreibung an und ändern die Größe der App:

adb shell am compat enable FORCE_RESIZE_APP <package>

So entfernen Sie die Überschreibung:

adb shell am compat disable FORCE_RESIZE_APP <package>

Hinweis:Die Befehle werden nur vorübergehend angewendet oder entfernt.

APP_NICHT_RESIZE_APP_ERZWINGEN

Erzwingt, dass die Pakete, auf die die Überschreibung angewendet wird, nicht in der Größe geändert werden kann, und wechseln bei Konfigurationsänderungen in den Größenkompatibilitätsmodus.

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

Lege im App-Manifest sowohl das Attribut android:resizeableActivity als auch das Metadaten-Flag android.supports_size_changes auf false fest und gib entweder eine Einschränkung der Ausrichtung oder des Seitenverhältnisses an.

Apps optimieren

Für alle Apps, die sich gut verhalten, wenn ihre Größe angepasst wird, sollte entweder android:resizeableActivity oder android.supports_size_changes auf true festgelegt sein. Andere Apps sollten verbessert werden, damit sie auch bei Größenänderung gut funktionieren. Weitere Informationen finden Sie unter android:resizeableActivity.

Überschreiben deaktivieren oder deaktivieren

Legen Sie das Attribut-Flag PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES auf false fest.

Property-Flags zum Anpassen der Überschreibung

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

ADB-Befehle zum Testen der Überschreibung

So wenden Sie die Überschreibung an und legen fest, dass die Größe der App nicht geändert werden kann:

adb shell am compat enable FORCE_NON_RESIZE_APP <package>

So entfernen Sie die Überschreibung:

adb shell am compat disable FORCE_NON_RESIZE_APP <package>

Hinweis:Die Befehle werden nur vorübergehend angewendet oder entfernt.

ÜBERSCHREIBUNG_MIN_ASPECT_RATIO

Entspricht dem Gatekeeper für alle Überschreibungen, die ein bestimmtes minimales Seitenverhältnis erzwingen.

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

Lege 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 unterschiedliche Bildschirmgrößen unterstützt. Mithilfe von Fenstergrößenklassen können Sie je nach Platz, den Ihre App auf dem Bildschirm hat, verschiedene Layouts unterstützen. Weitere Informationen finden Sie unter Compose WindowSizeClass API und View WindowSizeClass API.

Überschreiben deaktivieren oder deaktivieren

Geben Sie eine Einschränkung des Seitenverhältnisses an oder legen Sie das Attribut-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 der Überschreibung

So wenden Sie die Überschreibung an:

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO <package>

So entfernen Sie die Überschreibung:

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO <package>

Hinweis:Die Befehle werden nur vorübergehend angewendet oder entfernt.

ÜBERSCHREITUNG_MIN_ASPECT_RATIO_PORTRAIT_ONLY

Beschränkt App-Einstellungen, die ein bestimmtes Mindestseitenverhältnis für Aktivitäten im Hochformat erzwingen. Diese Option ist standardmäßig aktiviert und wird nur wirksam, wenn OVERRIDE_MIN_ASPECT_RATIO ebenfalls 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 der Überschreibung

So wenden Sie die Überschreibung an:

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY <package>

So entfernen Sie die Überschreibung:

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY <package>

Hinweis:Die Befehle werden nur vorübergehend angewendet oder entfernt.

ÜBERSCHREIBUNG_MIN_ASPECT_RATIO_MITTEL

Legt das minimale Seitenverhä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 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:Die Befehle werden nur vorübergehend angewendet oder entfernt.

ÜBERSCHREITUNG_MIN_ASPECT_RATIO_GROß

Legt das minimale Seitenverhältnis der Aktivität auf einen hohen Wert (16:9) fest

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

Weitere Informationen finden Sie unter OVERRIDE_MIN_ASPECT_RATIO.

Apps optimieren

Weitere Informationen finden Sie unter OVERRIDE_MIN_ASPECT_RATIO.

Überschreiben deaktivieren oder deaktivieren

Weitere Informationen finden Sie unter OVERRIDE_MIN_ASPECT_RATIO.

Property-Flags zum Anpassen der Überschreibung

Weitere Informationen finden Sie unter OVERRIDE_MIN_ASPECT_RATIO.

ADB-Befehle zum Testen der Überschreibung

So wenden Sie die Überschreibung an:

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_LARGE <package>

So entfernen Sie die Überschreibung:

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_LARGE <package>`

Hinweis:Die Befehle werden nur vorübergehend angewendet oder entfernt.

ÜBERSCHREIBEN_MIN_ASPECT_RATIO_TO_ALIGN_MIT_SPLIT_SCREEN

Dadurch kann das Seitenverhältnis für geteilten Bildschirm verwendet werden. Ermöglicht einer App, den gesamten verfügbaren Platz im Splitscreen-Modus zu nutzen, ohne Letterboxing-Balken zu vermeiden.

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

Weitere Informationen finden Sie unter OVERRIDE_MIN_ASPECT_RATIO.

Apps optimieren

Weitere Informationen finden Sie unter OVERRIDE_MIN_ASPECT_RATIO.

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

So wenden Sie die Überschreibung an:

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN <package>

So entfernen Sie die Überschreibung:

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN <package>

Hinweis:Die Befehle werden nur vorübergehend angewendet oder entfernt.

ÜBERSCHREIBUNG_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_VOLLBILD

Deaktiviert die Überschreibung des Mindestseitenverhältnisses im Hochformat im Vollbildmodus, um den gesamten verfügbaren Platz auf dem Bildschirm 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 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:Die Befehle werden nur vorübergehend angewendet oder entfernt.

ÜBERSCHREITUNG_UNDEFINIERTER_ORIENTATION_ZU_PORTRAIT

Aktiviert das Hochformat für alle Aktivitäten im Paket. Sofern OVERRIDE_ANY_ORIENTATION nicht aktiviert ist, wird die Überschreibung nur verwendet, wenn von der Aktivität keine andere feste Ausrichtung angegeben wurde.

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

Lege das Manifestattribut activity:screenOrientation fest oder verwende die Activity#setRequestedOrientation() API.

Apps optimieren

Deine App sollte alle Ausrichtungen unterstützen. Eine Änderung der Ausrichtung ist eine Konfigurationsänderung, die auf zwei Arten durchgeführt werden kann: Sie lassen die Anwendung vom System löschen und neu erstellen oder Sie verwalten die Konfigurationsänderungen selbst. Wenn Sie Konfigurationsänderungen selbst verwalten, kann der Anwendungsstatus mit ViewModel beibehalten werden. In sehr seltenen Fällen können Sie entscheiden, die Ausrichtung nur auf kleinen Bildschirmen zu fixieren. Dies kann jedoch möglicherweise nicht skaliert werden und der Nutzer kann die App nach Bedarf drehen. Unter Android 12L und höher kann die feste Ausrichtung durch die Gerätekonfiguration überschrieben werden. Weitere Informationen zum Umgang mit Konfigurationsänderungen und zur Unterstützung aller Ausrichtungen finden Sie unter Umgang mit Konfigurationsänderungen, ViewModel – Übersicht und App-Ausrichtung auf Smartphones, aber nicht auf Geräten mit großen Bildschirmen eingeschränkt.

Überschreiben deaktivieren oder deaktivieren

Legen Sie das Attribut-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 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:Die Befehle werden nur vorübergehend angewendet oder entfernt.

ÜBERSCHREIBEN

Aktiviert die nosensor-Ausrichtung für alle Aktivitäten im Paket. Sofern OVERRIDE_ANY_ORIENTATION nicht aktiviert ist, wird die Überschreibung nur verwendet, wenn von der Aktivität keine andere feste Ausrichtung angegeben wurde.

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

Weitere Informationen finden Sie unter OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT.

Apps optimieren

Weitere Informationen finden Sie unter OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT.

Überschreiben deaktivieren oder deaktivieren

Weitere Informationen finden Sie unter OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT.

Property-Flags zum Anpassen der Überschreibung

Weitere Informationen finden Sie unter OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT.

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:Die Befehle werden nur vorübergehend angewendet oder entfernt.

ÜBERSCHREIBUNG_LANDSCHAFT_ORIENTATION_ZU_REVERSE_LANDSCHAFT

Aktiviert die reverseLandscape-Ausrichtung für alle Aktivitäten im Paket. Sofern OVERRIDE_ANY_ORIENTATION nicht aktiviert ist, wird die Überschreibung nur verwendet, wenn von der Aktivität keine andere feste Ausrichtung angegeben wurde.

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

Weitere Informationen finden Sie unter OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT.

Apps optimieren

Weitere Informationen finden Sie unter OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT.

Überschreiben deaktivieren oder deaktivieren

Weitere Informationen finden Sie unter OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT.

Property-Flags zum Anpassen der Überschreibung

Weitere Informationen finden Sie unter OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT.

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:Die Befehle werden nur vorübergehend angewendet oder entfernt.

ÜBERSCHREIBUNG_ANY_ORIENTATION

Die Überschreibungen OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT, OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR und OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE können alle Ausrichtungen überschreiben.

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

Weitere Informationen finden Sie unter OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT.

Apps optimieren

Weitere Informationen finden Sie unter OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT.

Überschreiben deaktivieren oder deaktivieren

Weitere Informationen finden Sie unter OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT.

Property-Flags zum Anpassen der Überschreibung

Weitere Informationen finden Sie unter OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT.

ADB-Befehle zum Testen der Überschreibung

So wenden Sie die Überschreibung an:

adb shell am compat enable OVERRIDE_ANY_ORIENTATION <package>

So entfernen Sie die Überschreibung:

adb shell am compat disable OVERRIDE_ANY_ORIENTATION <package>

Hinweis:Die Befehle werden nur vorübergehend angewendet oder entfernt.

ÜBERSCHREIBUNG_NUR_FÜR_KAMERA

Die Überschreibungen OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT, OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR und OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE werden nur wirksam, wenn die Kameraverbindung aktiv ist.

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

Weitere Informationen finden Sie unter OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT.

Apps optimieren

Weitere Informationen finden Sie unter OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT.

Überschreiben deaktivieren oder deaktivieren

Weitere Informationen finden Sie unter OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT.

Property-Flags zum Anpassen der Überschreibung

Weitere Informationen finden Sie unter OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT.

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:Die Befehle werden nur vorübergehend angewendet oder entfernt.

OVERRIDE_USE_DISPLAY_LANDSCHAFT_NATURAL_ORIENTATION

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

  • Aktivität wird im Vollbildmodus angezeigt
  • Eigenschaft der Komponente „Deaktivieren“ PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE ist nicht aktiviert
  • Die Einstellung zum Ignorieren der Ausrichtungsanfrage des Geräteherstellers ist für das Display aktiviert
  • Natürliche Ausrichtung der Anzeige im Querformat

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

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

Apps optimieren

Weitere Informationen finden Sie unter OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT.

Überschreiben deaktivieren oder deaktivieren

Legen Sie das Attribut-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 der Überschreibung

So wenden Sie die Überschreibung an:

adb shell am compat enable OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION <package>

So entfernen Sie die Überschreibung:

adb shell am compat disable OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION <package>

Hinweis:Die Befehle werden nur vorübergehend angewendet oder entfernt.

ÜBERSCHREIBUNG_ENABLE_KOMPAT_IGNORE_REQUESTED_ORIENTATION

Aktiviert eine Kompatibilitätsrichtlinie, die die Aktualisierung der App-Ausrichtung als Reaktion auf den Aufruf von Activity#setRequestedOrientation() durch die App überspringt, wenn die App neu gestartet wird oder eine aktive Kamerakompatibilität aufweist.

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

Legen Sie das Attribut-Flag PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION auf true fest.

Apps optimieren

Weitere Informationen finden Sie unter OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT.

Überschreiben deaktivieren oder deaktivieren

Legen Sie das Attribut-Flag PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION auf false fest.

Property-Flags zum Anpassen der Überschreibung

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

ADB-Befehle zum Testen der Überschreibung

So wenden Sie die Überschreibung an:

adb shell am compat enable OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION <package>

So entfernen Sie die Überschreibung:

adb shell am compat disable OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION <package>

Hinweis:Die Befehle werden nur vorübergehend angewendet oder entfernt.

ÜBERSCHREIBUNG_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED

Aktiviert die Kompatibilitätsrichtlinie, die die angeforderte Ausrichtung einer Anwendung ignoriert, wenn die Anwendung Activity#setRequestedOrientation() mehr als zweimal in einer Sekunde aufruft, wenn eine Aktivität nicht für die feste Ausrichtung im Letterbox-Format gekennzeichnet ist.

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

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

Apps optimieren

Weitere Informationen finden Sie unter OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT.

Überschreiben deaktivieren oder deaktivieren

Legen Sie das Attribut-Flag PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED auf false fest.

Property-Flags zum Anpassen der Überschreibung

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED"
  android:value="false"/>

ADB-Befehle zum Testen der Überschreibung

So wenden Sie die Überschreibung an:

adb shell am compat enable OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED <package>

So entfernen Sie die Überschreibung:

adb shell am compat disable OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED <package>

Hinweis:Die Befehle werden nur vorübergehend angewendet oder entfernt.

ÜBERSCHREIBUNG_RESPECT_ANGEBOTSORIENTATION

Schließt Pakete vom Ignorieren der Ausrichtungsanfrage aus, das von Geräteherstellern für einen Anzeigebereich oder den gesamten Bildschirm aktiviert werden kann.

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

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

Apps optimieren

Weitere Informationen finden Sie unter OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT.

Überschreiben deaktivieren oder deaktivieren

Keine Deaktivierung. Das Deaktivieren der Überschreibung kann gefährlich sein, wenn die App nicht mit einem Gerät kompatibel ist, bei dem der Gerätehersteller die Einstellung zur Ignorieren der Ausrichtungsanfrage aktiviert hat. Wenden Sie sich an Android Developer Relations, um die Überschreibung zu deaktivieren.

Property-Flags zum Anpassen der Überschreibung

Keine Property-Flags für diese Überschreibung.

ADB-Befehle zum Testen der Überschreibung

So wenden Sie die Überschreibung an:

adb shell am compat enable OVERRIDE_RESPECT_REQUESTED_ORIENTATION <package>

So entfernen Sie die Überschreibung:

adb shell am compat disable OVERRIDE_RESPECT_REQUESTED_ORIENTATION <package>

Hinweis:Die Befehle werden nur vorübergehend angewendet oder entfernt.

NEVER_SANDBOX_DISPLAY_APIS

Erzwingt, dass Pakete niemals eine Display-API-Sandbox für eine Aktivität im Letterbox- oder Größenkompatibilitätsmodus anwenden. Die Display APIs stellen weiterhin Begrenzungen des Anzeigebereichs bereit.

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

Sie können Aktivitäten angeben, deren Größe angepasst werden kann, indem Sie entweder das Manifestattribut android:resizeableActivity auf true oder das Metadaten-Flag android.supports_size_changes auf true setzen.

Apps optimieren

Bei Apps, für die angegeben wird, dass ihre Größe vollständig angepasst werden kann, sollte bei der Positionierung von UI-Elementen nie die Anzeigegröße verwendet werden. Migrieren Sie Ihre App zu aktuellen APIs, die WindowMetrics bereitstellen. Wenn Sie Jetpack Compose verwenden, nutzen Sie die WindowSizeClass API, um die Benutzeroberfläche basierend auf dem Bildschirmbereich der App auf dem aktuellen Bildschirm zu zeichnen. Weitere Informationen finden Sie unter Fenstergrößenklassen.

Überschreiben deaktivieren oder deaktivieren

Keine Deaktivierung. Von verworfenen APIs migrieren.

Property-Flags zum Anpassen der Überschreibung

Keine Property-Flags für diese Überschreibung.

ADB-Befehle zum Testen der Überschreibung

So wenden Sie die Überschreibung an:

adb shell am compat enable NEVER_SANDBOX_DISPLAY_APIS <package>

So entfernen Sie die Überschreibung:

adb shell am compat disable NEVER_SANDBOX_DISPLAY_APIS <package>

Hinweis:Die Befehle werden nur vorübergehend angewendet oder entfernt.

ALWAYS_SANDBOX_DISPLAY_APIS

Erzwingt, dass Pakete unabhängig vom Windowing-Modus immer die API-Sandbox von Display verwenden. Die Display APIs stellen immer die Anwendungsgrenzen bereit.

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

Sie können Aktivitäten angeben, deren Größe nicht geändert werden kann, indem Sie entweder das Attribut android:resizeableActivity auf false oder das Metadaten-Flag android.supports_size_changes auf false setzen.

Apps optimieren

Apps, für die angegeben wird, dass ihre Größe vollständig angepasst werden kann, sollten sich beim Positionieren von UI-Elementen niemals auf die Anzeigegröße verlassen. Migrieren Sie Ihre Anwendung von verworfenen APIs zu aktuellen APIs, die WindowMetrics bereitstellen. Weitere Informationen finden Sie unter WindowMetricsCalculator.

Überschreiben deaktivieren oder deaktivieren

Keine Deaktivierung. Von verworfenen APIs migrieren.

Property-Flags zum Anpassen der Überschreibung

Keine Property-Flags für diese Überschreibung.

ADB-Befehle zum Testen der Überschreibung

So wenden Sie die Überschreibung an:

adb shell am compat enable ALWAYS_SANDBOX_DISPLAY_APIS <package>

So entfernen Sie die Überschreibung:

adb shell am compat disable ALWAYS_SANDBOX_DISPLAY_APIS <package>

Hinweis:Die Befehle werden nur vorübergehend angewendet oder entfernt.

OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS

Erzwingt, dass Pakete für die folgenden View APIs eine Sandbox mit Aktivitätsgrenzen ausführen:

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

Beheben Sie das Problem im Anwendungscode mithilfe von APIs, die die Grenzen des App-Fensters und Offsets relativ zum App-Fenster und nicht die Grenzen der Geräteanzeige und die Offsets relativ zum Gerätebildschirm angeben.

Apps optimieren

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

Überschreiben deaktivieren oder deaktivieren

Legen Sie das Attribut-Flag PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS auf false fest.

Property-Flags zum Anpassen der Überschreibung

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS"
  android:value="false"/>

ADB-Befehle zum Testen der Überschreibung

So wenden Sie die Überschreibung an:

adb shell am compat enable OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS <package>

So entfernen Sie die Überschreibung:

adb shell am compat disable OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS <package>

Hinweis:Die Befehle werden nur vorübergehend angewendet oder entfernt.

ÜBERSCHREIBUNG_KAMERA_KOMPAT_DEAKTIVIERT_FORCE_ROTATION

Deaktiviert die erzwungene Drehung. Verbessert die Nutzerfreundlichkeit einiger Apps.

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

Legen Sie das Attribut-Flag PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION auf false fest.

Apps optimieren

Verlassen Sie sich nicht auf die im Cache gespeicherte Ausrichtung des Kamerasensors oder auf Geräteinformationen. Informationen zur Kamerakompatibilität finden Sie unter Einführung in den Kamerasucher und Unterstützung von Oberflächen mit anpassbarer Größe in Ihrer Kamera-App.

Überschreiben deaktivieren oder deaktivieren

Legen Sie das Attribut-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 der Überschreibung

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

adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>

So entfernen Sie die Überschreibung, die eine erzwungene Drehung ermöglicht:

adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>

Hinweis:Die Befehle werden nur vorübergehend angewendet oder entfernt.

ÜBERSCHREIBEN_KAMERA_KOMPAT_DEAKTIVIERT_AKTUALISIEREN

Deaktiviert die Aktualisierung von Aktivitäten nach erzwungener Rotation. Die Nutzerfreundlichkeit wird verbessert, wenn eine Aktualisierung zu Zustandsverlusten in Apps führt.

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

Legen Sie das Attribut-Flag PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH auf false fest.

Apps optimieren

Weitere Informationen finden Sie unter OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION.

Überschreiben deaktivieren oder deaktivieren

Legen Sie das Attribut-Flag PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH auf true fest.

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, mit der die Aktivitätsaktualisierung entfernt wird:

adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>

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

adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>

Hinweis:Die Befehle werden nur vorübergehend angewendet oder entfernt.

ÜBERSCHREIBEN_KAMERA_KOMPAT_AKTIVIERT_ÜBERARBEITEN_VIA_PAUSE

Sorgt dafür, dass die Pakete, auf die die Aktivität angewendet wird, mit einem Zyklus onResume()onPause()onResume() statt onResume()onStop()onResume() aktualisiert werden, nachdem die Drehung der Kamerakompatibilität erzwungen wurde.

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

Legen Sie das Attribut-Flag PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE auf true fest.

Apps optimieren

Weitere Informationen finden Sie unter OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION.

Überschreiben deaktivieren oder deaktivieren

Legen Sie das Attribut-Flag PROPERTY_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 der Überschreibung

So wenden Sie die Überschreibung an:

adb shell am compat enable OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE <package>

So entfernen Sie die Überschreibung:

adb shell am compat disable OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE <package>

Hinweis:Die Befehle werden nur vorübergehend angewendet oder entfernt.

ÜBERSCHREIBUNG_KAMERA_LANDSCHAFT_ZU_PORTRAIT

Erzwingt, dass die Kameraausgabe in die entgegengesetzte Ausrichtung zugeschnitten wird, wenn die Ausrichtung der Kamera im Hochformat nicht mit der natürlichen Geräteausrichtung übereinstimmt. Viele Apps kommen mit dieser Situation nicht zurecht und zeigen ansonsten gestreckte Bilder an.

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

Legen Sie das Attribut-Flag PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT auf true fest.

Apps optimieren

Weitere Informationen finden Sie unter OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION.

Überschreiben deaktivieren oder deaktivieren

Legen Sie das Attribut-Flag PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT auf false fest.

Property-Flags zum Anpassen der Überschreibung

<property android:name="android.camera.PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT"
  android:value="true|false"/>

ADB-Befehle zum Testen der Überschreibung

So wenden Sie die Überschreibung an, mit der das Zuschneiden der Frontkamera auf die innere Kamera angewendet wird:

adb shell am compat enable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>

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

adb shell am compat disable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>

Hinweis:Die Befehle werden nur vorübergehend angewendet oder entfernt.

OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION

Verhindert, dass Apps die App-Bildschirmfreigabe deaktivieren (siehe Medienprojektion). Wird implementiert, wenn Apps die createConfigForDefaultDisplay() API missbrauchen, um die Aufnahme des Vollbilds zu erzwingen und die Privatsphäre der Nutzer zu gefährden, indem der Inhalt von Benachrichtigungen, die im Vollbildmodus, aber nicht bei der App-Bildschirmfreigabe erfasst werden, und alle Apps unabhängig vom Fenstermodus offengelegt werden.

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

Standardverhalten für die Medienprojektion zulassen (implementiert in Android 14, API-Ebene 34 mit createScreenCaptureIntent()), sodass Nutzer unabhängig vom Fenstermodus entscheiden können, ob der Vollbildmodus oder ein einzelnes App-Fenster freigegeben werden soll. Alternativ können Sie createScreenCaptureIntent(MediaProjectionConfig) mit einem MediaProjectionConfig-Argument aufrufen, das von einem Aufruf von createConfigForUserChoice() zurückgegeben wurde.

Apps optimieren

Nutzer können auswählen, ob sie während der Medienprojektion das gesamte Display des Geräts oder ein App-Fenster teilen möchten. Dies ist ab Android 14 die Standardeinstellung.

Anpassen der Größe der App (resizeableActivity="true"), um den Mehrfenstermodus zu unterstützen.

Überschreiben deaktivieren oder deaktivieren

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

Property-Flags zum Anpassen der Überschreibung

Keine.

ADB-Befehle zum Testen der Überschreibung

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

adb shell am compat enable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>

So entfernen Sie die Überschreibung, die es der App ermöglicht, die Teilfreigabe des Bildschirms zu deaktivieren:

adb shell am compat disable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>

Hinweis:Die Befehle werden nur vorübergehend angewendet oder entfernt.

ÜBERSCHREIBEN_ENABLE_KOMPAT_FAKE_FOCUS

Aktiviert das Senden eines gefälschten Fokus für Apps ohne Fokus im Splitscreen-Modus. Einige Spiel-Engines warten auf den Fokus, bevor sie den Inhalt der App zeichnen. Der falsche Fokus trägt also dazu bei, dass Apps geschwärzt bleiben, wenn sie fortgesetzt werden und noch nicht im Fokus sind.

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

Legen Sie das Attribut-Flag PROPERTY_COMPAT_ENABLE_FAKE_FOCUS auf true fest.

Apps optimieren

Sie können dieses Problem vermeiden, wenn Ihre App mehrere Ausrichtungen und Konfigurationsänderungen gut verarbeitet. Bereite deine App auf einen großen Bildschirm vor. Folge dazu den Qualitätsrichtlinien für Apps mit großen Bildschirmen.

Wenn du die Unity-Spiel-Engine verwendest, führe ein Upgrade auf Version 2019.4.40 oder höher durch und exportiere dein Spiel noch einmal. Achte darauf, dass die Option Resizable Window in den Android Player-Einstellungen aktiviert ist.

Überschreiben deaktivieren oder deaktivieren

Legen Sie das Attribut-Flag PROPERTY_COMPAT_ENABLE_FAKE_FOCUS auf false fest.

Property-Flags zum Anpassen der Überschreibung

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

ADB-Befehle zum Testen der Überschreibung

So wenden Sie die Überschreibung an:

adb shell am compat enable OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS <package>

So entfernen Sie die Überschreibung:

adb shell am compat disable OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS <package>

Hinweis:Die Befehle werden nur vorübergehend angewendet oder entfernt.

Zusätzliche Ressourcen