Kompatibilitätsmodus für große Bildschirme

Android aktiviert einen Kompatibilitätsmodus für Apps, die Einschränkungen der Ausrichtung oder Größe angeben. Der Kompatibilitätsmodus sorgt für ein akzeptables App-Verhalten auf Geräten mit großen Bildschirmen, aber mit suboptimaler Nutzerfreundlichkeit.

Mit App-Überschreibungen können Gerätehersteller das App-Verhalten ändern, um die Nutzerfreundlichkeit zu verbessern oder zu verhindern, dass Apps auf großen Bildschirmen funktionieren.

Häufige Kompatibilitätsprobleme

In den meisten Apps treten Kompatibilitätsprobleme aufgrund von Einschränkungen der App-Ausrichtung, Einschränkungen der Größe und des Seitenverhältnisses, falscher Handhabung der Ausrichtung der Kameravorschau und falsch verwendeter APIs auf.

Letterboxing

Durch Letterbox-Bild wird die App für einen bequemen Zugriff in der Mitte des Bildschirms oder, bei großen Bildschirmen, auf einer Seite oder zur anderen platziert. Mattes (einfarbige Balken oder verschwommener Hintergrund) füllen den ungenutzten Anzeigebereich an den Seiten oder oben und unten in der App aus.

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

Abbildung 1: Die App ist auf das Hochformat eingeschränkt und 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 hat oder nicht in der Größe geändert werden kann.

Zu den Konfigurationseinstellungen gehören die folgenden Einstellungen:

  • screenOrientation: Gibt eine feste Ausrichtung für eine App an. Apps können die Ausrichtung auch zur Laufzeit festlegen, indem Sie Activity#setRequestedOrientation() verwenden.
  • resizeableActivity: Gibt an, ob das System die Größe von Apps an Fenster mit unterschiedlichen Abmessungen anpassen kann. 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 unterstützen (sw < 600 dp). Unter Android 12 und höher unterstützen Apps den Mehrfenstermodus auf großen Bildschirmen (sw >= 600 dp), unabhängig von dieser Einstellung.
  • maxAspectRatio: Gibt das maximale von der App unterstützte Seitenverhältnis an. Nur Apps, bei denen resizeableActivity auf „false“ gesetzt ist, kann maxAspectRatio festlegen.
  • minAspectRatio: Gibt das minimale Seitenverhältnis an, das von der App unterstützt wird. minAspectRatio kann nur in Apps festgelegt werden, bei denen resizeableActivity auf „false“ gesetzt ist.

Optimierung

Die App sollte alle Bildschirmausrichtungen und -größen für Geräte- und Mehrfenstermodus unterstützen. Entfernen Sie alle Einschränkungen im Hinblick auf Ausrichtung und festes Seitenverhältnis aus Ihren App-Layouts und der App-Manifestdatei. Weitere Informationen finden Sie unter Unterstützung verschiedener Bildschirmgrößen.

Behelfslösung für kompatible Kompatibilität

Wenn eine App mit einer festen Ausrichtung oder einem festen Seitenverhältnis in einem Fenster ausgeführt wird, in dem die App die Größe oder Ausrichtung des Fensters nicht direkt unterstützt, erstellt Android Letterbox-Bild für die App, um die Kontinuität zu wahren.

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

Android 12 (API-Level 31) bietet die folgenden ästhetischen Verbesserungen, die von Geräteherstellern konfiguriert werden können:

  • Abgerundete Ecken:Die Ecken des App-Fensters haben ein besseres Design.
  • Transparenz der Systemleiste:Die Status- und Navigationsleisten, die die App überlagern, sind semitransparent. Dadurch sind die Symbole auf den Leisten immer vor dem Letterbox-Hintergrund sichtbar.
  • Konfigurierbares Seitenverhältnis:Das Seitenverhältnis der App kann angepasst werden, um das Erscheinungsbild der App zu verbessern.

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

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

  • Konfigurierbare Positionierung:Auf großen Bildschirmen können Gerätehersteller die App links oder rechts auf dem Bildschirm positionieren, um die Interaktion zu erleichtern.
  • Neu gestaltete Schaltfläche zum Neustart:Gerätehersteller können der Schaltfläche zum Neustarten für den Größenkompatibilitätsmodus ein neues Design verleihen, damit Nutzer sie besser erkennen.

Unter Android 13 (API-Level 33) wird ein Dialogfeld mit Informationen zur Positionierung der App im Letterbox-Format oder zur Einbindung des Letterbox-Bildschirms im Splitscreen-Modus hinzugefügt:

Abbildung 3: App mit Letterbox-Bild und Dialogfeld mit Informationen zum Nutzer.

Kompatibilitätsmodus für Größen

Der Größenkompatibilitätsmodus ist das Letterbox-Format mit einem Steuerelement für den Neustart. 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 geändert werden kann. Wenn eine Aktivität in einen Displaycontainer mit nicht kompatiblen Abmessungen verschoben wird, skaliert das System die App möglicherweise neu, um die Geräteanzeige mit mindestens einer Dimension zu füllen.

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

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

Problem

Der Größenkompatibilitätsmodus gilt in der Regel für Aktivitäten, deren Ausrichtung oder Seitenverhältnis eingeschränkt ist und deren Größe (oder Systemeinstellung) so konfiguriert ist, dass sie nicht geändert werden kann.

Wenn Ihre App eines der folgenden Kriterien erfüllt, wird davon ausgegangen, dass die Größe der App angepasst werden kann und sie nicht auf den Größenkompatibilitätsmodus gesetzt wird:

Wenn Ihre App keine dieser Bedingungen erfüllt, kann ihre Größe nicht angepasst werden. Die App könnte dann in den Größenkompatibilitätsmodus versetzt werden.

Optimierung

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

Behelfslösung für kompatible Kompatibilität

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

Flackernde Schleifen

Wenn eine App nicht alle Bildschirmausrichtungen unterstützt, kann sie bei einer Konfigurationsänderung wiederholt neue Ausrichtungen anfordern. Dadurch entsteht eine Endlosschleife, die das Display flackert oder die App endlos dreht.

Problem

Unter Android 12 (API-Level 31) und höher können Gerätehersteller ihre Geräte so konfigurieren, dass die von Apps festgelegten Ausrichtungsbeschränkungen ignoriert und stattdessen die Einschränkungen für Kompatibilitätsmodi verwendet werden. So könnte beispielsweise ein faltbares Gerät die Einstellung android:screenOrientation="portrait" einer Aktivität ignorieren, wenn die Aktivität auf dem inneren Display des Geräts im Querformat angezeigt wird.

Wenn die Ausrichtungsbeschränkungen einer App ignoriert werden, kann die App ihre Ausrichtung programmatisch durch Aufrufen von Activity#setRequestedOrientation() festlegen. Der Aufruf löst einen App-Neustart aus, wenn die App keine Konfigurationsänderungen verarbeitet. Weitere Informationen finden Sie unter Konfigurationsänderungen verarbeiten. Nach dem Neustart werden die Einschränkungen der App-Ausrichtung wieder ignoriert, die App wiederholt den Aufruf von setRequestedOrientation(), der Aufruf löst einen App-Neustart aus usw. in einer sich wiederholenden Schleife.

Dies kann auch auftreten, wenn die natürliche Ausrichtung, also die von Android festgelegte gewöhnliche Ausrichtung, eines Gerätebildschirms im Querformat ist. Das heißt, beim Aufrufen von Display#getRotation() wird Surface.ROTATION_0 zurückgegeben, während das Gerät ein Seitenverhältnis im Querformat 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 aber nicht immer der Fall, z. B. beim inneren Display von Pixel Fold und bei einigen Tablets.

Eine App im Querformat auf einem inneren Display von Pixel Fold prüft möglicherweise die Bildschirmdrehung, erhält den Wert ROTATION_0, nimmt an, dass die natürliche Ausrichtung das Hochformat ist, und ruft setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) auf. Nach dem Neustart der App (im Querformat) wird unter Umständen in einer Endlosschleife noch einmal die Bildschirmdrehung überprüft, der Wert ROTATION_0 empfangen, setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) aufgerufen usw.

Optimierung

Folgendes sollten Apps nicht tun:

  • Legen Sie mit Activity#setRequestedOrientation() in der Aktivitätsmethode onCreate() eine Standardausrichtung fest, da die Ausrichtungsanfrage durch unbehandelte Konfigurationsänderungen unerwartet ausgelöst werden kann
  • Das Gerät (ROTATION_0) sollte im Hochformat gehalten werden
  • Legen Sie die Ausrichtung basierend auf Signalen fest, die nicht mit der aktuellen Fenstergröße zusammenhängen, z. B. Display#getRotation(), das Vorhandensein einer FoldingFeature oder eingestellte APIs (siehe unten).

Behelfslösung für kompatible Kompatibilität

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

  • Die Aktivität wurde nach einem vorherigen Aufruf der Methode bereits neu gestartet oder die Behandlung der Drehung der Kamerakompatibilität wurde aktiviert (siehe Kameravorschau unten).

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

  • Bei der Aktivität wurden mehr als zwei Ausrichtungsanfragen pro Sekunde gesendet, was darauf hinweist, dass es eine Schleife gegeben hat. Von den beiden Anfragen in der Schleife verwendet Android diejenige, mit der der Darstellungsbereich 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

Die Android-Kompatibilitätsdefinition besagt, 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 angemessene Annahme bei herkömmlichen Smartphones. Tablets und Laptops sowie deren Kamerasensoren können im Querformat ausgerichtet sein. Außerdem können neue Formfaktoren wie faltbare Smartphones mehrere natürliche Ausrichtungen und mehrere Kamerasensoren in verschiedenen Ausrichtungen haben.

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

Optimierung

Kamera-Apps müssen die Geräteausrichtung und die Ausrichtung des Kamerasensors korrekt identifizieren und verwalten, damit eine korrekt ausgerichtete und skalierte Kameravorschau dargestellt wird. Apps müssen die Geräte- und Sensordrehung sowie das Seitenverhältnis des Bildschirms oder Fensters berechnen und die Ergebnisse dann auf die Kameravorschau anwenden. Eine ausführliche Anleitung finden Sie unter Kameravorschau und Jetzt neu: Kamerasucher.

Behelfslösung für kompatible Kompatibilität

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 passt das Fenster im Hochformat von Apps mit eingeschränktem Hochformat an die natürliche Ausrichtung des Geräts an. Das wird von den meisten Apps erwartet. Android schneidet das Bild des Kamerasensors außerdem zu, wenn die Sensorausrichtung im Querformat und die Kameravorschau im Hochformat ist. Sie können folgende Problemumgehungen nutzen:

  • Drehen der Kameravorschau für Apps mit eingeschränktem 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 Spezifikation der Ausrichtung ignorieren.

    Wenn eine App mit der Kamera verbunden ist, die auf das Hochformat beschränkt ist, wird die App von Android so gedreht, dass sie im Hochformat an der natürlichen Ausrichtung des Geräts ausgerichtet ist.

    Auf Pixel Tablet wird das Fenster im Hochformat der App zum Vollbild-Hochformat gedreht, um es an die natürliche Ausrichtung des Geräts anzupassen. Nachdem die Drehung erzwungen wurde, wird die App im Vollbildmodus angezeigt.

    Auf dem inneren Display von Pixel Fold werden Aktivitäten im Hochformat ins Querformat gedreht, um sie an die natürliche Ausrichtung anzupassen. Die App wird nach dem Erzwingen der Drehung im Letterbox-Format dargestellt.

  • Zuschnitt der inneren Frontkamera:Der Sensor für die innere Frontkamera von Pixel Fold ist im Querformat ausgerichtet. Android erzwingt nicht nur ein Drehen der Kameravorschau auf dem inneren Display von Pixel Fold, sondern schneidet auch das Sichtfeld der inneren Frontkamera (Querformat) zu, damit der Sensor eine Sicht entgegen der Geräteausrichtung erfasst.

  • Aktualisierung der Kameravorschau erzwingen:Nach der erzwungenen Drehung wechselt das System zwischen den Aktivitätsmethoden onStop() und onStart() (standardmäßig) oder onPause() und onResume() (angewandt durch OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE pro App-Überschreibung), damit die Drehung erzwungen wird, damit die Kameravorschau korrekt angezeigt wird.

  • Seitenverhältnisskalierung:Das System ändert das Seitenverhältnis der erzwungenen Kameravorschau dynamisch in ein höheres minimales Seitenverhältnis, damit die Kameravorschau korrekt skaliert wird.

App-Entwickler können diese Behelfslösungen überschreiben, wenn die Apps die Kameravorschau korrekt verarbeiten. Weitere Informationen finden Sie unten im Abschnitt Überschreibungen pro App.

Häufig missbräuchlich verwendete APIs

Da Android jetzt Funktionen wie den Mehrfenstermodus 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 verwendet werden können. Die eingestellten APIs stehen jedoch aus Gründen der Abwärtskompatibilität weiterhin zur Verfügung.

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

Problem

Entwickler verwenden weiterhin verworfene Display-APIs und gehen fälschlicherweise davon aus, dass die APIs die App-Grenzen anstelle der Begrenzung des Geräte-Anzeigebereichs zurückgeben. Oder Entwickler verwenden irrtümlicherweise spezielle View APIs, um allgemeine Anzeigemesswerte abzurufen. Das führt zu Fehlberechnungen beim Neupositionieren von UI-Elementen nach Größenänderungsereignissen von App-Fenstern, die Layoutprobleme verursachen.

Eingestellte und häufig missbrauchte Display APIs:

Weitere Informationen finden Sie unter Unterstützung des Mehrfenstermodus.

Missbrauch von View APIs:

Optimierung

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

Behelfslösung für kompatible Kompatibilität

Mit zwei Überschreibungen werden die eingestellten Display APIs und die missbrauchten View APIs so angepasst, dass die Anwendungsgrenzen zurückgegeben werden: ALWAYS_SANDBOX_DISPLAY_APIS für Display APIs und OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS für View APIs. ALWAYS_SANDBOX_DISPLAY_APIS wird außerdem standardmäßig auf Apps angewendet, die die Voraussetzungen für den Größenkompatibilitätsmodus erfüllen.

Transparente Aktivitäten

Transparente Aktivitäten sind das Ergebnis von transparenten Hintergrundstilen, zum Beispiel:

<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, wie Theme.Material.Dialog, können Stile enthalten, die Aktivitäten transparent machen.

Transparente Aktivitäten decken nicht den gesamten verfügbaren Anzeigebereich ein. Das erschwert die Bedienung auf großen Bildschirmen, da sich der verfügbare Anzeigebereich je nach Konfigurationsänderungen wie Gerätedrehung, Gerätefalten und -aufklappen sowie Mehrfenstermodus ändern kann.

Problem

Auf großen Bildschirmen sollte eine transparente Aktivität den Grenzen der ersten intransparenten Aktivität unterhalb der transparenten Aktivität im Aufgaben-Aktivitätsstapel entsprechen. Eine intransparente Aktivität, bei der ein Berechtigungsdialogfeld gestartet wird, kann jedoch ein Trampolin sein (eine Aktivität, die andere Aktivitäten startet), die nach dem Starten des Dialogfelds wieder ausgeblendet wird. Daher kann das System die Grenzen der intransparenten Aktivität unter der transparenten Aktivität nicht ermitteln.

Optimierung

Durchsichtige Aktivitäten übernehmen ihre Einschränkungen von der obersten intransparenten Aktivität im Aktivitätsstapel einer Aufgabe. Die intransparente Aktivität muss für den gesamten Lebenszyklus der durchscheinenden Aktivität verfügbar sein, von der Erstellung bis zur Vernichtung. Aus diesem Grund sollten Sie bei Trampolinaktivitäten keine Berechtigungsanfragen senden.

Wenn durch eine Trampolinaktivität eine Berechtigungsanfrage ausgelöst wird, kann der Nutzer den Berechtigungsdialog möglicherweise nicht sehen, weil die Trampolinaktivität gelöscht wird, bevor der Nutzer auf den Dialog reagieren konnte.

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

Abgerundete Ecken

Eine Aktivität kann durchscheinend sein, indem sie ein durchscheinendes Design verwendet oder den verfügbaren Platz nicht ausfüllt. Wenn eine durchscheinende Aktivität die verfügbare Fläche ausfüllt, wendet das System automatisch abgerundete Ecken auf die Aktivität an, sofern dies vom Gerätehersteller entsprechend konfiguriert wurde. Wenn jedoch eine durchsichtige Aktivität (z. B. ein Berechtigungsdialog) nicht den verfügbaren Platz ausfüllt, müssen Sie entscheiden, ob Sie abgerundete Ecken verwenden möchten.

Berechtigungsdialogfelder füllen nicht den verfügbaren Anzeigebereich aus, da für das Layout des Dialogfelds normalerweise LayoutParams.WRAP_CONTENT anstelle von LayoutParams.MATCH_PARENT verwendet wird.

Behelfslösung für kompatible Kompatibilität

Lassen Sie Aktivitäten, die Dialogaktivitäten starten, sichtbar, bis der Nutzer auf das Dialogfeld geantwortet hat.

Das System stellt sicher, dass eine transparente Aktivität alle Einschränkungen der ersten intransparenten Aktivität unter der transparenten Aktivität im Aktivitätsstapel erbt, einschließlich Einschränkungen in Bezug auf:

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

Unity-Spiele

Unity-Spiele werden im Android-Vollbild- oder im Mehrfenstermodus ausgeführt. Viele Unity-Spiele verlieren jedoch den Fokus und beenden das Zeichnen von Inhalten, wenn sich die App im Mehrfenstermodus befindet.

Problem

Unity hat seit 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, wodurch UnityPlayer die Wiedergabe unterbrochen hat, wenn die App den Fokus verliert. Der Spieler hat einen schwarzen Bildschirm oder den letzten, eingefrorenen Frame des Spiels gerendert. Das Spiel wurde erst fortgesetzt, wenn der Nutzer auf den Bildschirm getippt hat. Bei vielen Apps, in denen die Unity-Engine verwendet wird, tritt dieses Problem auf und werden im Mehrfenstermodus als schwarzes Fenster gerendert.

Optimierung

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

Behelfslösung für kompatible Kompatibilität

Gerätehersteller können die OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS-Überschreibung für jede App anwenden, um ein falsches Fokusereignis auf eine App im Mehrfenstermodus zu übertragen. Durch die Überschreibung kann die Aktivität den Inhalt neu zeichnen und nicht geschwärzt werden.

App auf Kompatibilitätsprobleme testen

Um Ihre App zu testen und zu verstehen, wie sie sich bei verschiedenen Formfaktoren verhält, nutzen Sie die folgenden Ressourcen:

Mit 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 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 stellen Sie sicher, dass die Zielaktivität nicht im Letterbox-Format dargestellt wird:

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 rule = new ActivityScenarioRule<>(MainActivity.class);

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

Idealerweise sollten Sie diese Art von Test nur so lange durchführen, bis sie bestanden wurde und die Aktivitäten Ihrer App den gesamten für die App verfügbaren Anzeigebereich einnehmen. Testen Sie Ihre App auf allen Gerätetypen, um ein einheitliches Verhalten sicherzustellen.

Überschreibungen pro App

Android bietet Überschreibungen, die das konfigurierte Verhalten von Apps ändern. Mit der Überschreibung FORCE_RESIZE_APP wird das System beispielsweise angewiesen, den Größenkompatibilitätsmodus zu umgehen und die Größe der App an die Displayabmessungen anzupassen, selbst wenn resizeableActivity="false" im App-Manifest festgelegt ist.

Gerätehersteller überschreiben bestimmte Apps auf bestimmten Geräten mit großen Bildschirmen. Unter Android 14 (API-Level 34) und höher können Nutzer in den Geräteeinstellungen Überschreibungen auf Apps anwenden.

Überschreibungen pro App

Unter Android 14 und höher können Nutzer über ein Einstellungsmenü das Seitenverhältnis von Apps ändern. Auf Geräten mit großen Bildschirmen wie Pixel Tablet und Pixel Fold wird das Menü implementiert.

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 im App-Manifest angegebenen Standardwert der App zurücksetzen.

Für Apps kann die Kompatibilitätsüberschreibung deaktiviert werden, indem die folgenden PackageManager.Property-Tags festgelegt werden:


  • PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE

    Wenn Sie die Überschreibung der Nutzerseitenverhältnis-Kompatibilität deaktivieren möchten, fügen Sie die Property zu 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 von der Liste der Apps in den Geräteeinstellungen ausgeschlossen. Nutzer können das Seitenverhältnis der App nicht überschreiben.

    Das Festlegen der Eigenschaft auf true hat keine Auswirkungen.


  • PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_FULLSCREEN_OVERRIDE

    Um die Vollbildoption der Überschreibung des Seitenverhältnisses für Nutzer zu deaktivieren, fügen Sie die Eigenschaft 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 in den Geräteeinstellungen aus der Liste der Seitenverhältnisoptionen entfernt. Nutzer können die Vollbildüberschreibung nicht auf Ihre App anwenden.

    Das Festlegen dieser Eigenschaft auf true hat keine Auswirkungen.

App für große Bildschirme optimieren:Legen Sie in Ihrer App keine Seitenverhältnisbeschränkungen fest. Verwenden Sie Fenstergrößenklassen, um verschiedene Layouts basierend auf der Menge des verfügbaren Anzeigebereichs zu unterstützen.

Überschreibungen pro App durch den Gerätehersteller

Die Gerätehersteller überschreiben die einzelnen Geräte der einzelnen Apps. Auf Pixel Tablet und Pixel Fold werden einige der Überschreibungen standardmäßig auf verschiedene Apps angewendet.

Für Apps können die meisten Überschreibungen deaktiviert werden. Weitere Informationen dazu finden Sie in der Tabelle Überschreibungen pro App unten.

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

Sie können auch die Android Debug Bridge (ADB) verwenden, um Überschreibungen zu aktivieren oder zu deaktivieren und um zu bestimmen, welche Überschreibungen auf Ihre App angewendet werden.

So aktivieren oder deaktivieren Sie Überschreibungen:

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

Prüfen Sie bei Pixel Tablet und Pixel Fold, welche Überschreibungen für Ihre App gelten:

adb shell dumpsys platform_compat | grep <package name>

In der folgenden Tabelle sind die verfügbaren Überschreibungen sowie eine Anleitung zur Optimierung Ihrer App aufgeführt, damit die App nicht auf Überschreibungen angewiesen ist. Sie können Ihrem App-Manifest Property-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 Anwendung bei Konfigurationsänderungen.
FORCE_NON_RESIZE_APP 181136395 Zwingt 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 Umfang auf Aktivitäten im Hochformat beschränkt.
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 so, dass es 50% der Displaygröße (oder des geteilten Seitenverhältnisses) passt
OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN 218959984 Deaktiviert das Überschreiben des minimalen Seitenverhältnisses, damit Apps im Hochformat angezeigt werden.
Ausrichtung OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT 265452344 Überschreibt die Ausrichtung auf Hochformat, wenn eine Aktivität eine nicht definierte Ausrichtung hat.
OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR 265451093 Überschreibt die Ausrichtung auf nosensor (wobei die natürliche Ausrichtung des Geräts verwendet wird), wenn eine Aktivität eine undefinierte Ausrichtung hat.
OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE 266124927 Dreht Apps, die nur im Querformat verfügbar sind, um 180 Grad.
OVERRIDE_ANY_ORIENTATION 265464455 Ermöglicht das Überschreiben einer beliebigen Ausrichtung.
OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA 265456536 Beschränkt den Bereich zum Überschreiben der Ausrichtung auf den Zeitpunkt, zu dem die App mit der Kamera verbunden ist.
OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION 255940284 Stellt die Anzeige auf eine feste natürliche Ausrichtung im Querformat ein, wenn eine Aufgabe im Vollbildmodus angezeigt wird (auch bei Letterbox-Bild).
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION 254631730 Ausrichtungsanfragen von der App werden ignoriert, um Rotationsschleifen zu vermeiden.
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED 273509367 Ignoriert wiederholte Ausrichtungsanfragen beim Neustart einer Aktivität. Wenn Android erkennt, dass eine App mindestens zwei neue Ausrichtungen innerhalb einer Sekunde anfordert, betrachtet das System dies als Rotationsschleife und wendet die Überschreibung an.
OVERRIDE_RESPECT_REQUESTED_ORIENTATION 236283604 Verhindert Letterbox-Bild, indem die Einstellung zum Ignorieren der Ausrichtungsanfrage des Geräteherstellers deaktiviert wird.
Sandbox-APIs NEVER_SANDBOX_DISPLAY_APIS 184838306 Verhindert, dass sich das Verhalten von Display-APIs ändert.
ALWAYS_SANDBOX_DISPLAY_APIS 185004937 Erzwingt, dass die Display APIs in der App App-Grenzen zurückgeben. Display-APIs geben Anzeigebereichsgrenzen zurück. Manchmal geht die Anwendung jedoch davon aus, dass Display-APIs App-Grenzen zurückgeben, was zu Problemen 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 Anzeigebereichsgrenzen zurück. Manchmal geht die Anwendung jedoch davon aus, dass View APIs Anwendungsgrenzen 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 wird die Rotation aller Kamera-Apps mit fester Ausrichtung erzwungen, wenn die Kameravorschau geöffnet ist.
OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH 264304459 Entfernt die standardmäßige vollständige Aktualisierung, wenn eine Kameravorschau erzwungen wird, um eine Drehung zu erzwingen.
ÜBERSCHRIFT_KAMERA_COMPAT_AKTIVIEREN_REFRESH_VIA_PAUSE 264301586 Schaltet die vollständige Aktualisierung auf eine sanfte Aktualisierung um, wenn eine Kameravorschau erzwungen wird, um den Zustand während der erzwungenen Rotation beizubehalten. Standardmäßig führt Android eine vollständige Aktualisierung durch, wenn eine Drehung der Kameravorschau erzwungen wird. Die vollständige Aktualisierung kann zu Problemen führen, wenn der Status bestimmter Apps verloren geht oder geschwärzt wird. Dies hängt davon ab, wie der vorherige Status im Cache gespeichert wurde.
LANDSCHAFT_IN_DES_PORTRAITS_ÜBERSCHREIBEN 250678880 Schneidet den Bildzwischenspeicher der inneren Frontkamera zu. Ist die Überschreibung deaktiviert, wird der Zuschnitt der inneren Frontkamera entfernt und das Sichtfeld der Kameravorschau vergrößert. Auf Pixel Fold 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 geteilten Bildschirmmodus nicht mehr im Fokus ist. Die App wartet auf den Fokus, bevor der App-Inhalt gezeichnet wird. Dies kann dazu führen, dass die App einfriert oder geschwärzt wird. Durch die Überschreibung kann Android ein falsches Fokusereignis an die App senden, das der App signalisiert, dass sie wieder mit dem Zeichnen von Inhalten beginnen soll.

FORCE_RESIZE_APP

Erzwingt, dass die Größe der Pakete, auf die die Überschreibung angewendet wird, geändert werden kann. Diese Änderung wirkt sich nicht darauf aus, ob die App in den Mehrfenstermodus versetzt werden kann, aber ermöglicht der App, beim Ändern der Bildschirmgröße die Größe anzupassen, ohne in den Größenkompatibilitätsmodus zu wechseln.

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

Setzen Sie im App-Manifest entweder das android:resizeableActivity-Attribut auf „true“ oder das android.supports_size_changes-Metadaten-Flag auf „true“, um eine Größenanpassung zu unterstützen, während der Mehrfenstermodus deaktiviert wird, wobei android:resizeableActivity auf „false“ gesetzt ist.

Apps optimieren

Verwenden Sie responsive/adaptive Layouts, damit sich Apps an alle Displaygrößen und Seitenverhältnissen anpassen können. Weitere Informationen finden Sie unter Unterstützung verschiedener Bildschirmgrößen.

Überschreiben deaktivieren oder deaktivieren

Legen Sie das Attribut-Flag PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES auf „false“ fest.

Eigenschafts-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 sorgen dafür, dass die App-Größe angepasst werden kann:

adb shell am compat enable FORCE_RESIZE_APP <package>

So entfernen Sie die Überschreibung:

adb shell am compat disable FORCE_RESIZE_APP <package>

Hinweis:Durch die Befehle wird die Überschreibung nur vorübergehend angewendet oder entfernt.

FORCE_NON_RESIZE_APP

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

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

Setzen Sie sowohl das android:resizeableActivity-Attribut als auch das android.supports_size_changes-Metadaten-Flag im App-Manifest auf „false“ und deklarieren Sie entweder eine Einschränkung der Ausrichtung oder des Seitenverhältnisses.

Apps optimieren

Für alle Apps, die nach Größenanpassung einwandfrei funktionieren, sollte android:resizeableActivity oder android.supports_size_changes auf „true“ gesetzt sein. Andere Apps sollten so optimiert werden, dass sie bei Größenanpassung einwandfrei 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.

Eigenschafts-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 sorgen dafür, 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:Durch die Befehle wird die Überschreibung nur vorübergehend angewendet oder entfernt.

OVERRIDE_MIN_ASPECT_RATIO

Der Gatekeeper für alle Behandlungen, die ein bestimmtes minimales Seitenverhältnis erzwingen.

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

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

Apps optimieren

Sie sollten in Ihrer App keine Beschränkungen des Seitenverhältnisses festlegen. Achten Sie darauf, dass Ihre App unterschiedliche Bildschirmgrößen unterstützt. Verwenden Sie Fenstergrößenklassen, um unterschiedliche 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.

Überschreiben deaktivieren oder deaktivieren

Legen Sie eine Einschränkung des Seitenverhältnisses fest oder setzen Sie das Attribut-Flag PROPERTY_COMPAT_ALLOW_MIN_ASPECT_RATIO_OVERRIDE auf "false".

Eigenschafts-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:Durch die Befehle wird die Überschreibung nur vorübergehend angewendet oder entfernt.

NUR_ÜBER_MIN_ASPECT_RATIO_PORTRAIT

schränkt Anwendungen ein, die für Aktivitäten, die nur im Hochformat ausgerichtet sind, ein bestimmtes minimales Seitenverhältnis erzwingen. Standardmäßig aktiviert und wird nur wirksam, wenn auch OVERRIDE_MIN_ASPECT_RATIO aktiviert ist.

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

Siehe OVERRIDE_MIN_ASPECT_RATIO.

Apps optimieren

Siehe OVERRIDE_MIN_ASPECT_RATIO.

Überschreiben deaktivieren oder deaktivieren

Siehe OVERRIDE_MIN_ASPECT_RATIO.

Eigenschafts-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:Durch die Befehle wird die Überschreibung nur vorübergehend angewendet oder entfernt.

OVERRIDE_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

Siehe OVERRIDE_MIN_ASPECT_RATIO.

Apps optimieren

Siehe OVERRIDE_MIN_ASPECT_RATIO.

Überschreiben deaktivieren oder deaktivieren

Siehe OVERRIDE_MIN_ASPECT_RATIO.

Eigenschafts-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:Durch die Befehle wird die Überschreibung nur vorübergehend angewendet oder entfernt.

ÜBER_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

Siehe OVERRIDE_MIN_ASPECT_RATIO.

Apps optimieren

Siehe OVERRIDE_MIN_ASPECT_RATIO.

Überschreiben deaktivieren oder deaktivieren

Siehe OVERRIDE_MIN_ASPECT_RATIO.

Eigenschafts-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:Durch die Befehle wird die Überschreibung nur vorübergehend angewendet oder entfernt.

ÜBER_MIN_ASPECT_RATIO_ZU_ALIGN_MIT_SPLIT_SCREEN

Aktiviert die Verwendung des Seitenverhältnisses für den geteilten Bildschirm. Ermöglicht einer App, den gesamten verfügbaren Platz im geteilten Bildschirmmodus zu verwenden, um Letterbox-Bild zu vermeiden

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

Siehe OVERRIDE_MIN_ASPECT_RATIO.

Apps optimieren

Siehe OVERRIDE_MIN_ASPECT_RATIO.

Überschreiben deaktivieren oder deaktivieren

Siehe OVERRIDE_MIN_ASPECT_RATIO.

Eigenschafts-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:Durch die Befehle wird die Überschreibung nur vorübergehend angewendet oder entfernt.

OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN

Deaktiviert die minimale Überschreibung des Seitenverhältnisses im Hochformat, sodass der gesamte verfügbare Platz auf dem Bildschirm genutzt wird.

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

Siehe OVERRIDE_MIN_ASPECT_RATIO.

Apps optimieren

Siehe OVERRIDE_MIN_ASPECT_RATIO.

Überschreiben deaktivieren oder deaktivieren

Siehe OVERRIDE_MIN_ASPECT_RATIO.

Eigenschafts-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:Durch die Befehle wird die Überschreibung nur vorübergehend angewendet oder entfernt.

OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT

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

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

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

Apps optimieren

Ihre App sollte alle Ausrichtungen unterstützen. Bei einer Ausrichtungsänderung handelt es sich um eine Konfigurationsänderung, die auf zwei Arten erfolgen kann: Sie können die App löschen und neu erstellen lassen oder die Konfigurationsänderungen selbst verwalten. Wenn Sie Konfigurationsänderungen selbst verwalten, kann der App-Status mithilfe einer ViewModel beibehalten werden. In sehr wenigen Fällen können Sie die Ausrichtung nur auf kleinen Bildschirmen sperren, obwohl dies möglicherweise nicht so gut skaliert und dass der Nutzer die App nach Bedarf drehen kann. Ab Android 12L kann die feste Ausrichtung durch die Gerätekonfiguration überschrieben werden. Weitere Informationen zum Verarbeiten von Konfigurationsänderungen und zur Unterstützung aller Ausrichtungen finden Sie unter Konfigurationsänderungen verarbeiten, ViewModel-Übersicht und App-Ausrichtung auf Smartphones, aber nicht auf Geräten mit großen Bildschirmen eingeschränkt.

Überschreiben deaktivieren oder deaktivieren

Legen Sie das Attribut-Flag PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE auf „false“ fest.

Eigenschafts-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:Durch die Befehle wird die Überschreibung nur vorübergehend angewendet oder entfernt.

OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR

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

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

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

Apps optimieren

Weitere Informationen finden Sie unter OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT.

Überschreiben deaktivieren oder deaktivieren

Legen Sie das Attribut-Flag PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE auf „false“ fest.

Eigenschafts-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_NOSENSOR <package>

So entfernen Sie die Überschreibung:

adb shell am compat disable OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR <package>

Hinweis:Durch die Befehle wird die Überschreibung nur vorübergehend angewendet oder entfernt.

QUERFLÄCHE_ÜBERSCHREIBEN

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

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

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

Apps optimieren

Weitere Informationen finden Sie unter OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT.

Überschreiben deaktivieren oder deaktivieren

Legen Sie das Attribut-Flag PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE auf „false“ fest.

Eigenschafts-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_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE <package>

So entfernen Sie die Überschreibung:

adb shell am compat disable OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE <package>

Hinweis:Durch die Befehle wird die Überschreibung nur vorübergehend angewendet oder entfernt.

OVERRIDE_ANY_ORIENTATION

Die Überschreibungen OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT, OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR und OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE sind zulässig.

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

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

Apps optimieren

Weitere Informationen finden Sie unter OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT.

Überschreiben deaktivieren oder deaktivieren

Legen Sie das Attribut-Flag PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE auf „false“ fest.

Eigenschafts-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:Durch die Befehle wird die Überschreibung nur vorübergehend angewendet oder entfernt.

NUR_FOR_CAMERA_ÜBERSCHREIBEN

Die Überschreibungen OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT, OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR und OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE werden nur bei aktiver Kameraverbindung wirksam.

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

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

Apps optimieren

Weitere Informationen finden Sie unter OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT.

Überschreiben deaktivieren oder deaktivieren

Legen Sie das Attribut-Flag PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE auf „false“ fest.

Eigenschafts-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_ORIENTATION_ONLY_FOR_CAMERA <package>

So entfernen Sie die Überschreibung:

adb shell am compat disable OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA <package>

Hinweis:Durch die Befehle wird die Überschreibung nur vorübergehend angewendet oder entfernt.

OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION

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

  • Aktivität wird im Vollbildmodus angezeigt
  • Die Komponenteneigenschaft „PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE“ zur Deaktivierung ist nicht aktiviert
  • Die Einstellung zum Ignorieren der Ausrichtungsanfrage des Geräteherstellers ist für das Display aktiviert
  • Natürliche Ausrichtung des Displays ist 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.

Eigenschafts-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:Durch die Befehle wird die Überschreibung nur vorübergehend angewendet oder entfernt.

OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION

Aktiviert eine Kompatibilitätsrichtlinie, bei der die Aktualisierung der App-Ausrichtung übersprungen wird, wenn eine App Activity#setRequestedOrientation() aufruft, 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.

Eigenschafts-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:Durch die Befehle 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 für eine feste Ausrichtung im Letterbox-Format verwendet wird.

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.

Eigenschafts-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:Durch die Befehle wird die Überschreibung nur vorübergehend angewendet oder entfernt.

OVERRIDE_RESPECT_REQUESTED_ORIENTATION

Schließt Pakete vom Ignorieren von Ausrichtungsanfragen aus, die von Geräteherstellern für einen Anzeigebereich oder das gesamte Display aktiviert werden können.

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 die Einstellung zum Ignorieren der Ausrichtungsanfrage durch den Gerätehersteller aktiviert ist. Wenden Sie sich an Android Developer Relations, um die Überschreibung zu deaktivieren.

Eigenschafts-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:Durch die Befehle wird die Überschreibung nur vorübergehend angewendet oder entfernt.

NEVER_SANDBOX_DISPLAY_APIS

Erzwingt, dass Pakete nie eine Display-API-Sandbox auf eine Aktivität im Letterbox- oder Größenkompatibilitätsmodus angewendet werden. Die Display-APIs stellen weiterhin Anzeigebereichsgrenzen bereit

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

Deklarieren Sie Aktivitäten, deren Größe geändert werden kann, indem Sie entweder das Manifestattribut android:resizeableActivity auf „wahr“ oder das Metadaten-Flag android.supports_size_changes auf „wahr“ setzen.

Apps optimieren

Apps, für die eine vollständige Größenanpassung deklariert wird, sollten zur Positionierung von UI-Elementen nie auf die Anzeigegröße angewiesen sein. 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 Unterstützung verschiedener Bildschirmgrößen.

Überschreiben deaktivieren oder deaktivieren

Keine Deaktivierung. Migrieren Sie von verworfenen APIs.

Eigenschafts-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:Durch die Befehle wird die Überschreibung nur vorübergehend angewendet oder entfernt.

ALWAYS_SANDBOX_DISPLAY_APIS

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

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

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

Apps optimieren

Apps, für die eine vollständige Größenanpassung deklariert wird, sollten zur Positionierung von UI-Elementen nie auf die Anzeigegröße angewiesen sein. Migrieren Sie Ihre Anwendung von eingestellten APIs auf aktuelle APIs, die WindowMetrics bereitstellen. Weitere Informationen finden Sie unter WindowMetricsCalculator.

Überschreiben deaktivieren oder deaktivieren

Keine Deaktivierung. Migrieren Sie von verworfenen APIs.

Eigenschafts-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:Durch die Befehle wird die Überschreibung nur vorübergehend angewendet oder entfernt.

OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS

Erzwingt, dass Pakete die folgenden View APIs in einer Sandbox gemäß Aktivitätsgrenzen ausführen:

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

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

Apps optimieren

Apps sollten View APIs verwenden und dabei die Möglichkeit berücksichtigen, dass Letterbox- und Mehrfenstermodus auf die App angewendet werden (siehe WindowMetricsCalculator).

Überschreiben deaktivieren oder deaktivieren

Legen Sie das Attribut-Flag PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS auf „false“ fest.

Eigenschafts-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:Durch die Befehle wird die Überschreibung nur vorübergehend angewendet oder entfernt.

DEAKTIVIERUNG_DES_KAMERA_ÜBERSCHREIBEN

Deaktiviert die erzwungene Rotation. Verbessert die Nutzererfahrung in einigen 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 Ausrichtung des Kamerasensors im Cache oder Geräteinformationen. Informationen zur Kompatibilität von Kameras finden Sie unter Einführung in den Kamerasucher und Unterstützung von Oberflächen mit anpassbarer Größe in der Kamera-App.

Überschreiben deaktivieren oder deaktivieren

Legen Sie das Attribut-Flag PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION auf „true“ fest.

Eigenschafts-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, wodurch die erzwungene Rotation entfernt wird:

adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>

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

adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>

Hinweis:Durch die Befehle wird die Überschreibung nur vorübergehend angewendet oder entfernt.

KAMERA_KOMPAT_DEAKTIVIEREN_AKTUALISIEREN

Deaktiviert die Aktivitätsaktualisierung nach erzwungener Rotation. Verbessert die Nutzerfreundlichkeit in Apps, wenn durch die Aktualisierung ein Statusverlust verursacht wird.

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

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

Überschreiben deaktivieren oder deaktivieren

Legen Sie das Attribut-Flag PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH auf „true“ fest.

Eigenschafts-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, mit der Aktivitäten aktualisiert werden können:

adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>

Hinweis:Durch die Befehle wird die Überschreibung nur vorübergehend angewendet oder entfernt.

ÜBERSCHRIFT_KAMERA_KOMPAT_ENABLE_REFRESH_ÜBER_PAUSE

Dadurch werden die Pakete, für die die Aktivität angewendet wird, mit onResume()onPause()onResume() Zyklus statt onResume()onStop()onResume() aktualisiert, nachdem die Rotation der Kamerakompatibilität erzwungen wird.

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

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

Überschreiben deaktivieren oder deaktivieren

Legen Sie das Attribut-Flag PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE auf „false“ fest.

Eigenschafts-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:Durch die Befehle wird die Überschreibung nur vorübergehend angewendet oder entfernt.

LAND_KAMERA_IN_PORTRÄT_ÜBERSCHREIBEN

Erzwingt, dass die Kameraausgabe auf die entgegengesetzte Ausrichtung zugeschnitten wird, wenn die Kamera im Hochformat nicht mit der natürlichen Geräteausrichtung übereinstimmt. Viele Apps können diese Situation nicht bewältigen. Andernfalls werden gestreckte Bilder angezeigt.

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

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

Überschreiben deaktivieren oder deaktivieren

Legen Sie das Attribut-Flag PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT auf „false“ fest.

Eigenschafts-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, wodurch die innere Frontkamera zugeschnitten wird:

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:Durch die Befehle 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 Vollbildaufnahme zu erzwingen und den Datenschutz für Nutzer zu gefährden, indem die Inhalte von Benachrichtigungen, die im Vollbildmodus, aber nicht mit der App-Bildschirmfreigabe aufgenommen werden, offengelegt werden. Außerdem werden alle Apps unabhängig vom Windowing-Modus angezeigt.

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

Das Standardverhalten für die Medienprojektion wird in Android 14, API-Ebene 34 mit createScreenCaptureIntent() implementiert. Nutzer können dann unabhängig vom Windowing-Modus entscheiden, ob sie den Vollbildmodus oder ein einzelnes App-Fenster teilen möchten. Alternativ können Sie createScreenCaptureIntent(MediaProjectionConfig) mit einem MediaProjectionConfig-Argument aufrufen, das von einem Aufruf an createConfigForUserChoice() zurückgegeben wurde.

Apps optimieren

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

Die App-Größe (resizeableActivity="true") kann angepasst werden, damit der Mehrfenstermodus unterstützt wird.

Überschreiben deaktivieren oder deaktivieren

Da der Datenschutz für Nutzer sehr wichtig ist, kann diese Überschreibung in Ihrer App nicht deaktiviert oder deaktiviert werden.

Eigenschafts-Flags zum Anpassen der Überschreibung

Keine.

ADB-Befehle zum Testen der Überschreibung

So wenden Sie die Überschreibung an, wodurch die Deaktivierung der teilweisen Bildschirmfreigabe durch die App, d. h. die Aktivierung der Teilfreigabe, abgebrochen wird:

adb shell am compat enable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>

So heben Sie die Überschreibung auf, mit der die App die Teilfreigabe des Bildschirms deaktivieren kann:

adb shell am compat disable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>

Hinweis:Durch die Befehle wird die Überschreibung nur vorübergehend angewendet oder entfernt.

ÜBERSCHREIBUNG_AKTIVER_COMPAT_FAKE_FOCUS

Ermöglicht das Senden eines vorgetäuschten Fokus für Apps ohne Fokus im geteilten Bildschirmmodus. Einige Spiel-Engines warten darauf, sich auf den Fokus zu konzentrieren, bevor sie den Inhalt der App zeichnen. Mit einem gefälschten Fokus können Apps vermeiden, dass sie 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 unterstützt. Mache deine App bereit für einen großen Bildschirm. Beachte dabei die Qualitätsrichtlinien für Apps auf großen Bildschirmen.

Wenn Sie die Unity-Spiele-Engine ausführen, führen Sie ein Upgrade auf Version 2019.4.40 oder höher aus und exportieren Sie Ihr Spiel noch einmal. Lasse die Option Resizable Window in den Android Player-Einstellungen aktiviert.

Überschreiben deaktivieren oder deaktivieren

Legen Sie das Attribut-Flag PROPERTY_COMPAT_ENABLE_FAKE_FOCUS auf „false“ fest.

Eigenschafts-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:Durch die Befehle wird die Überschreibung nur vorübergehend angewendet oder entfernt.

Weitere Informationen