Tryb zgodności z dużym ekranem

Android aktywuje tryb zgodności w przypadku aplikacji, które deklarują ograniczenia w zakresie orientacji lub zmiany rozmiaru. Tryb zgodności zapewnia dopuszczalne działanie aplikacji na urządzeniach z dużymi ekranami, ale korzystanie z nich nie jest optymalne.

Zastąpienia na poziomie aplikacji umożliwiają producentom urządzeń zmienianie działania aplikacji w celu poprawy wygody użytkowników lub zapobiegania awariom aplikacji na dużych ekranach.

Typowe problemy ze zgodnością

Aplikacje mają najczęściej problemy ze zgodnością z powodu ograniczeń dotyczących orientacji aplikacji, możliwości zmiany rozmiaru i formatu obrazu, nieprawidłowej obsługi orientacji podglądu aparatu i niewłaściwie używanych interfejsów API.

Letterboxing

Format letterbox umieszcza aplikację na środku ekranu, a w przypadku dużych ekranów – po jednej lub drugiej stronie, aby ułatwić do niej dostęp. Maty (paski jednokolorowe lub rozmyta tapeta) wypełniają nieużywany obszar wyświetlania wzdłuż boków lub u góry i dołu aplikacji.

Tworzenie czarnych pasów pojawia się często na urządzeniach z dużymi ekranami, ponieważ wymiary i format obrazu wyświetlacza urządzenia zwykle różnią się od tych w standardowych telefonach, na które zaprojektowano większość aplikacji.

Rysunek 1. Na tablecie poziomym i składanym aplikacja może wyświetlać się w orientacji pionowej z czarnymi pasami.

Problem

Aplikacja nie obsługuje wszystkich konfiguracji wyświetlania, ponieważ ma stałą orientację lub format obrazu albo nie można jej zmienić.

Ustawienia konfiguracji, które kontrolują orientację aplikacji i możliwość jej zmiany rozmiaru:

  • screenOrientation: określa stałą orientację aplikacji. Aplikacje mogą też ustawiać orientację w czasie działania za pomocą elementu Activity#setRequestedOrientation().
  • resizeableActivity: wskazuje, czy system może zmieniać rozmiar aplikacji, aby dopasować je do okien o różnych wymiarach. Na Androidzie 11 (poziom interfejsu API 30) i starszych określa, czy aplikacje obsługują tryb wielu okien. Na Androidzie 12 (poziom interfejsu API 31) i nowszych określa, czy aplikacje obsługują tryb wielu okien na małych ekranach (o rozmiarze < 600 dp). Na Androidzie 12 i nowszych aplikacje obsługują tryb wielu okien na dużych ekranach (sw >= 600 dp) niezależnie od tego ustawienia.
  • maxAspectRatio: określa maksymalny współczynnik proporcji obsługiwany przez aplikację. Tylko aplikacje z parametrem resizeableActivity ustawionym na wartość Fałsz mogą ustawiać wartość maxAspectRatio.
  • minAspectRatio: określa minimalny format obrazu obsługiwany przez aplikację. Tylko aplikacje z parametrem resizeableActivity ustawionym na wartość Fałsz mogą ustawiać wartość minAspectRatio.

Optymalizacja

Aplikacja powinna obsługiwać wszystkie orientacje i rozmiary wyświetlacza urządzenia oraz trybu wielu okien. Usuń wszystkie ograniczenia dotyczące orientacji i stałych formatów obrazu z układów aplikacji i pliku manifestu aplikacji. Więcej informacji znajdziesz w artykule Obsługa różnych rozmiarów ekranu.

Obejście zgodności

Jeśli aplikacja o stałej orientacji lub współczynniku proporcji działa w oknie, w którym nie obsługuje ona bezpośrednio rozmiaru lub orientacji okna, Android dodaje do niej pasy do liter, aby zachować ciągłość działania.

Począwszy od Androida 12 (poziom interfejsu API 31) i dalszego od 12L (poziom API 32) platforma stosuje różne ulepszenia do aplikacji z czarnymi pasami. Producenci urządzeń stosują ulepszenia interfejsu – nie musisz nic więcej robić, aby korzystać z ulepszeń interfejsu aplikacji.

Android 12 (poziom interfejsu API 31) obejmuje te ulepszenia estetyczne, które mogą konfigurować producenci urządzeń:

  • Zaokrąglone rogi: rogi okna aplikacji mają bardziej szczegółowy wygląd.
  • Przezroczystość paska systemu: paski stanu i nawigacji, które nakładają się na aplikację, są półprzezroczyste, dzięki czemu ikony na paskach są zawsze widoczne nad tłem letterbox.
  • Konfigurowany format obrazu: można dostosować format obrazu aplikacji, aby poprawić jej wygląd.

Rysunek 2. Aplikacja w formacie Letterbox z ulepszeniami interfejsu.

12L (poziom interfejsu API 32) zawiera te usprawnienia funkcjonalne:

  • Konfigurowalne pozycjonowanie: w przypadku dużych ekranów producenci mogą umieszczać aplikację po lewej lub prawej stronie wyświetlacza, co ułatwia interakcję.
  • Nowy wygląd przycisku ponownego uruchamiania: producenci urządzeń mogą nadać przyciskowi ponownego uruchamiania w trybie zgodności rozmiaru nowy wygląd, aby użytkownicy byli lepiej rozpoznawani.

Android 13 (poziom interfejsu API 33) dodaje okno z informacjami dla użytkownika na temat umiejscowienia aplikacji z czarnymi pasami na ekranie lub dodawania do nich formatu letterbox w trybie podzielonego ekranu:

Rysunek 3. Aplikacja z czarnymi pasami i oknem z informacjami dla użytkownika.

Tryb zgodności rozmiaru

Tryb zgodności rozmiaru to letterboxing, który obejmuje opcję ponownego uruchamiania. To ustawienie umożliwia użytkownikom ponowne uruchomienie aplikacji i ponowne narysowanie wyświetlacza. Android wywołuje tryb zgodności rozmiaru w przypadku aplikacji, których rozmiar nie jest możliwy. Jeśli aktywność zostanie przeniesiona do kontenera wyświetlacza o niezgodnych wymiarach, system może przeskalować aplikację, aby wypełnić ekran urządzenia w co najmniej 1 wymiarze.

Oto zmiany w konfiguracji urządzenia, które mogą aktywować tryb zgodności rozmiaru:

  • Obracanie urządzenia
  • Składane urządzenie składane lub rozkładane
  • Przełączanie się między trybem pełnoekranowym i podzielonym ekranem

Problem

Tryb zgodności rozmiaru jest zwykle stosowany w przypadku aktywności, których orientacja lub format obrazu jest ograniczona i które są skonfigurowane (lub określone przez system) tak, że nie można ich zmieniać.

Uznaje się, że aplikację można zmieniać rozmiar i nie można jej włączyć w trybie zgodności rozmiaru, jeśli spełnia którekolwiek z tych kryteriów:

Jeśli aplikacja nie spełnia żadnego z warunków, nie można jej zmienić i będzie ją można włączyć w trybie zgodności rozmiaru.

Optymalizacja

Aplikacja powinna obsługiwać wszystkie rozmiary reklam displayowych. Włącz możliwość zmiany rozmiaru aplikacji, ustawiając w manifeście aplikacji wartość atrybutu android:resizeableActivity elementu <activity> lub <application> na „prawda”. Zaprojektuj elastyczne/adaptacyjne układy przeznaczone do Twojej aplikacji. Więcej informacji znajdziesz w artykułach Obsługa różnych rozmiarów ekranu i Obsługa wielu okien.

Obejście zgodności

Android przełącza aplikację w tryb zgodności rozmiaru, gdy system uzna, że wyświetlanie aplikacji z czarnymi pasami można poprawić przez przeskalowanie aplikacji w taki sposób, aby wypełniła okno wyświetlacza w co najmniej 1 wymiarze. System wyświetla element sterujący, który umożliwia odtworzenie procesu aplikacji, a także tworzenie aktywności i ponowne rysowanie wyświetlacza. Zobacz też Omówienie procesów i wątków.

Migoczące pętle

Gdy aplikacja nie obsługuje wszystkich orientacji wyświetlacza, po zmianie konfiguracji może wielokrotnie prosić o nowe orientacje. W ten sposób powstaje nieskończona pętla, która powoduje migotanie wyświetlacza i nieskończone obrót aplikacji.

Problem

W Androidzie 12 (poziom interfejsu API 31) i nowszych producenci mogą konfigurować swoje urządzenia w taki sposób, aby ignorowały ograniczenia orientacji określone przez aplikacje, a zamiast tego stosowały te ograniczenia do obsługi trybów zgodności. Na przykład urządzenie składane może ignorować ustawienie android:screenOrientation="portrait", gdy aktywność jest wyświetlana na wewnętrznym ekranie tabletu.

Jeśli ograniczenia dotyczące orientacji aplikacji są ignorowane, aplikacja może automatycznie ustawić jej orientację, wywołując metodę Activity#setRequestedOrientation(). Wywołanie to powoduje ponowne uruchomienie aplikacji, jeśli aplikacja nie obsługuje zmian konfiguracji (patrz Obsługa zmian konfiguracji). Po ponownym uruchomieniu ograniczenia dotyczące orientacji aplikacji zostaną ponownie zignorowane, aplikacja powtarza wywołanie do setRequestedOrientation(), powoduje ponowne uruchomienie aplikacji itd. w pętli, która zmienia się automatycznie.

Innym powodem może być sytuacja, w której naturalna orientacja ekranu urządzenia jest ustawiona w orientacji poziomej (zwykła). Wywołanie metody Display#getRotation() zwraca wtedy wartość Surface.ROTATION_0, a format obrazu to orientacja pozioma. Wcześniej aplikacje zakładały, że Display.getRotation() = Surface.ROTATION_0 oznacza urządzenie w orientacji pionowej, ale nie zawsze tak jest (np. na wewnętrznym ekranie Pixel Fold i na niektórych tabletach).

Aplikacja w orientacji poziomej na wewnętrznym wyświetlaczu Pixel Fold może sprawdzać obrót ekranu i otrzymywać wartość ROTATION_0. Przyjmuje, że naturalna orientacja jest pionowa, a następnie wywołuje metodę setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT). Po ponownym uruchomieniu (w orientacji poziomej) aplikacja może ponownie sprawdzić obrót ekranu, otrzymać wartość ROTATION_0, wywołać setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) itd. w nieskończonej pętli.

Optymalizacja

Aplikacje nie powinny:

  • Ustaw domyślną orientację z użyciem Activity#setRequestedOrientation() w metodzie aktywności onCreate(), ponieważ żądanie orientacji może zostać nieoczekiwanie aktywowane przez nieobsłużone zmiany konfiguracji
  • Przyjmijmy, że naturalna orientacja urządzenia (ROTATION_0) jest pionowa.
  • Ustaw orientację na podstawie sygnałów niezwiązanych z bieżącym rozmiarem okna, takich jak Display#getRotation(), obecność interfejsu FoldingFeature lub wycofane interfejsy API (patrz poniżej).

Obejście zgodności

Android ignoruje wywołania Activity#setRequestedOrientation() w tych sytuacjach:

Podgląd z aparatu

Podgląd aplikacji (lub wizjer) w aplikacjach aparatu może być niewłaściwie wyrównany lub zniekształcony na tabletach, laptopach i składanych wyświetlaczach.

Problem

Zgodnie z definicją zgodności z Androidem czujnik obrazu w aparacie „MUSI być zorientowany tak, aby jego długość była zgodna z długością ekranu”.

Aplikacje często zakładają, że orientacja urządzenia i czujnika aparatu mają orientację pionową – w przypadku standardowych telefonów komórkowych założenie jest uzasadnione. Tablety i laptopy oraz ich czujniki w ich naturalnej orientacji mogą mieć orientację poziomą. Ponadto nowe urządzenia, takie jak urządzenia składane, mogą mieć wiele naturalnych orientacji i różne czujniki aparatu.

Rozpoczęcie aktywności w nieoczekiwanej orientacji aplikacji lub przełączanie się między różnymi aparatami lub ekranami urządzeń (w przypadku urządzeń składanych) może spowodować niewłaściwie wyrównany lub zniekształcony podgląd aparatu.

Optymalizacja

Aby wyświetlać prawidłowo wyrównany i skalowany podgląd aparatu, aplikacje aparatu muszą poprawnie rozpoznawać orientację urządzenia i orientację czujnika aparatu oraz nimi zarządzać. Aplikacje muszą obliczyć obrót urządzenia, obrót czujnika oraz współczynnik proporcji ekranu lub okna, a potem zastosować wyniki do podglądu aparatu. Szczegółowe wskazówki znajdziesz w artykułach Podgląd aparatu i Przedstawiamy wizjer aparatu.

Obejście zgodności

Urządzenie jest w naturalnej orientacji, gdy Display#getRotation() zwraca Surface.ROTATION_0. System oblicza wartość CameraCharacteristics.SENSOR_ORIENTATION na podstawie naturalnej orientacji urządzenia. W przypadku aplikacji, w których można korzystać z aplikacji w orientacji pionowej, Android dopasowuje okno w orientacji pionowej do naturalnej orientacji urządzenia, czego oczekuje większość aplikacji. Jeśli czujnik ma orientację poziomą, a podgląd aparatu jest pionowy, Android przycina też obraz z czujnika aparatu. Można go obejść w następujący sposób:

  • Wymuszaj obrót podglądu aparatu w aplikacjach z ograniczeniem orientacji pionowej: aplikacje, które można wyświetlać tylko w orientacji pionowej, powinny mieć naturalną orientację urządzenia, a czujnik aparatu – pionową. Jednak na Androidzie 12 (poziom interfejsu API 31) i nowszych aplikacje mogą działać w różnych orientacjach urządzenia, jeśli producenci ignorują specyfikację.

    Gdy z aparatem podłączysz aplikację o ograniczeniu wyświetlania w pionie, Android wymusza obracanie aplikacji, aby dopasować ją do naturalnej orientacji urządzenia.

    Na urządzeniu Pixel Tablet okno aplikacji jest obrócone do orientacji pełnoekranowej w orientacji pionowej. Po wymuszeniu obrotu aplikacja zajmuje pełny ekran.

    Na wewnętrznym ekranie urządzenia Pixel Fold czynności wykonywane tylko w orientacji pionowej są obracane do poziomu poziomego, aby dopasować się do naturalnej orientacji rozłożonej. Po wymuszeniu rotacji aplikacja ma czarne pasy.

  • Przycinanie wewnętrznego przedniego aparatu: czujnik wewnętrznego przedniego aparatu w Pixel Fold jest w orientacji poziomej. Oprócz wymuszania obracania podglądu aparatu na wewnętrznym wyświetlaczu Pixel Fold Android przycina pole widzenia wewnętrznego przedniego (poziomego) aparatu, tak aby czujnik rejestrował widok odwrotny do orientacji urządzenia.

  • Wymuś odświeżanie podglądu aparatu: po wymuszeniu obracania podgląd aparatu przełącza się między metodami aktywności onStop() i onStart() (domyślnie) lub onPause() i onResume() (stosowanymi przez OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE do poszczególnych aplikacji).

  • Skalowanie współczynnika proporcji: system dynamicznie zmienia proporcje obrazu w wymuszonym obróceniu podglądu aparatu, aby uzyskać wyższy minimalny format obrazu. Dzięki temu podgląd z aparatu jest prawidłowo skalowany.

Deweloperzy aplikacji mogą zastąpić te obejścia, jeśli aplikacje poprawnie obsługują podgląd z aparatu. Zobacz sekcję Zastąpienia dla poszczególnych aplikacji poniżej.

Najczęściej używane interfejsy API

Ponieważ Android dodał obsługę takich funkcji jak tryb wielu okien i urządzenia składane, starsze interfejsy API zostały wycofane i zastąpione najnowszymi interfejsami API, które działają ze wszystkimi rozmiarami wyświetlaczy i formatami urządzeń. Wycofane interfejsy API nadal są jednak dostępne na potrzeby zgodności wstecznej.

Niektóre interfejsy API View są zaprojektowane do celów specjalnych, które nie zawsze są dobrze znane deweloperom.

Problem

Deweloperzy nadal korzystają z wycofanych interfejsów API Display i niewłaściwie zakładają, że zwracają one granice aplikacji, a nie obszaru wyświetlania urządzenia. Z kolei deweloperzy przez pomyłkę używają specjalnych interfejsów API widoku danych, aby uzyskać ogólne dane o sieci reklamowej. Efektem są błędne obliczenia podczas zmiany położenia elementów interfejsu po zdarzeniach zmiany rozmiaru okna aplikacji, które powodują problemy z układem.

Wycofane i często niewłaściwie używane interfejsy API w sieci reklamowej:

Więcej informacji znajdziesz w artykule Obsługa wielu okien.

Niewłaściwie użyte interfejsy View API:

Optymalizacja

Nigdy nie polegaj na fizycznym rozmiarze wyświetlacza przy pozycjonowaniu elementów interfejsu. Przenieś swoją aplikację do interfejsów API opartych na WindowMetrics, w tym tych WindowManager:

Obejście zgodności

Dwa zastąpienia dostosowują wycofane interfejsy API Display i niewłaściwie użyto interfejsów API View, aby zwracać wartości granic aplikacji: ALWAYS_SANDBOX_DISPLAY_APIS dla interfejsów API Display i OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS dla interfejsów API View. Atrybut ALWAYS_SANDBOX_DISPLAY_APIS jest też domyślnie stosowany w aplikacjach, które kwalifikują się do trybu zgodności rozmiaru.

Działania oczywiste

Działania przezroczyste są wynikiem stosowania przezroczystych stylów tła, na przykład:

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

Motywy powiązane z oknami, takimi jak Theme.Material.Dialog, mogą obejmować style, które zapewniają przejrzystość aktywności.

Aktywności przezroczyste nie obejmują całej dostępnej przestrzeni wyświetlania. Utrudnia to obsługę na dużych ekranach, ponieważ dostępny obszar wyświetlania może się zmieniać w zależności od konfiguracji urządzenia, np. obracania, składania i rozkładania oraz trybu wielu okien.

Problem

Na dużych ekranach aktywność przezroczysta powinna mieścić się w granicach pierwszej nieprzejrzystej aktywności poniżej aktywności przezroczystej w stosie aktywności zadań. Nieprzejrzystą aktywnością, która uruchamia okno uprawnień, może być jednak trampoliną (działaniem uruchamiającym inne działania), która znika po uruchomieniu okna. Tak więc system nie może określić granic przezroczystej aktywności pod aktywnością przezroczystą.

Optymalizacja

Aktywności półprzezroczyste dziedziczą ograniczenia od najbardziej nieprzejrzystej aktywności znajdującej się poniżej niej w stosie działań. Aktywność półprzezroczysta musi być dostępna przez cały cykl życia tej aktywności, od jej utworzenia do zniszczenia. Z tego powodu nie należy wysyłać próśb o przyznanie uprawnień podczas aktywności na trampolinie.

Jeśli aktywność na trampolinie uruchomi prośbę o przyznanie uprawnień, użytkownik może nie zobaczyć okna uprawnień, ponieważ aktywność na trampolinie została zniszczona, zanim użytkownik zareaguje na to okno.

Aplikacje powinny zawsze uruchamiać prośby o przyznanie uprawnień z aktywności, które pozostają widoczne do czasu, aż użytkownik dokona wyboru.

Zaokrąglone narożniki

Aktywność może być przezroczysta, jeśli użyjesz półprzezroczystego motywu lub niewypełniając dostępnego miejsca. Jeśli dostępną przestrzeń reklamową wypełnia półprzezroczysta aktywność, system automatycznie zastosuje do niej zaokrąglone rogi (o ile została tak skonfigurowana przez producenta urządzenia). Jeśli jednak półprzezroczyste działanie (np. okno uprawnień) nie wypełni dostępnego miejsca, to Ty decydujesz, czy chcesz zastosować zaokrąglone narożniki.

Okna z uprawnieniami nie wypełniają dostępnej przestrzeni, ponieważ w ich układzie zwykle używany jest element LayoutParams.WRAP_CONTENT zamiast LayoutParams.MATCH_PARENT.

Obejście zgodności

Aktywności, które uruchamiają działania w oknie, powinny być widoczne, dopóki użytkownik nie odpowie na to okno.

System sprawdza, czy przezroczyste działanie dziedziczy wszystkie ograniczenia z pierwszej nieprzejrzystej aktywności w stosie aktywności przezroczystej, w tym ograniczenia związane z:

  • Tryb zgodności rozmiaru
  • Orientacja
  • Format obrazu

Gry związane z Unity

Gry w Unity działają na pełnym ekranie lub w trybie wielu okien Androida. Wiele gier na Unity traci jednak koncentrację i przestaje rysować, gdy aplikacja działa w trybie wielu okien.

Problem

Od wersji Unity 2019.4 firma Unity dodała opcję Resizable Window, aby obsługiwać tryb wielu okien na Androidzie. Jednak początkowa implementacja nie zareagowała prawidłowo na cykl życia aktywności w trybie wielu okien, przez co UnityPlayer zawieszało odtwarzanie, gdy aplikacja przestała być aktywna. Gracz wyrenderował czarny ekran lub ostatnią, zablokowaną klatkę w grze. Gra została wznowiona dopiero po dotknięciu ekranu. Ten problem pojawia się w wielu aplikacjach korzystających z silnika Unity i w trybie wielu okien renderuje się jako czarne okno.

Optymalizacja

Uaktualnij Unity do wersji 2019.4.40 lub nowszej i ponownie wyeksportuj grę. Pozostaw zaznaczoną opcję Resizable Window w ustawieniach Android Playera. W przeciwnym razie gra zatrzyma się, gdy nie jest zaznaczona, mimo że gra jest w pełni widoczna w trybie wielu okien.

Obejście zgodności

Producenci urządzeń mogą zastosować zastępowanie OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS dla poszczególnych aplikacji, aby zapewnić fałszywe zdarzenie skupienia w aplikacji w trybie wielu okien. Zastąpienie umożliwia ponowne przerysowanie treści przez aktywność i nie jej zamazanie.

Testowanie zgodności aplikacji pod kątem problemów ze zgodnością

Aby przetestować aplikację i dowiedzieć się, jak działa na różnych formatach, skorzystaj z tych materiałów:

Ma czarne pasy

Sprawdź, czy każda aktywność może korzystać z całego miejsca dostępnego dla aplikacji. Najpierw zadeklaruj w folderze testowym ten kod:

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();
}

Następnie przeprowadź test, aby potwierdzić działanie i upewnić się, że aktywność docelowa nie ma czarnych pasów:

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();
        });
    }
}

Takie testy najlepiej przeprowadzać tylko do momentu, aż zakończy się ich pozytywny etap i nie potwierdzi, że aktywność w aplikacji zajmuje całe dostępne dla niej miejsce wyświetlania. Przetestuj aplikację na wszystkich typach urządzeń, by zapewnić spójne działanie aplikacji.

Zastąpienia na poziomie aplikacji

Android udostępnia zastąpienia, które zmieniają skonfigurowane działanie aplikacji. Na przykład zastąpienie FORCE_RESIZE_APP nakazuje systemowi pominięcie trybu zgodności rozmiaru i zmianę rozmiaru aplikacji w taki sposób, aby pasowała do wymiarów displayowych, nawet jeśli w manifeście aplikacji ustawiono resizeableActivity="false".

Producenci urządzeń stosują zastąpienia w wybranych aplikacjach na określonych urządzeniach z dużymi ekranami. Na Androidzie 14 (poziom interfejsu API 34) i nowszych użytkownicy mogą stosować zastąpienia w aplikacjach w ustawieniach urządzenia.

Zastąpienia poszczególnych użytkowników w poszczególnych aplikacjach

Na urządzeniach z Androidem 14 i nowszym menu ustawień pozwala użytkownikom zmieniać format obrazu aplikacji. Menu obsługuje się na urządzeniach z dużym ekranem, takich jak Pixel Tablet i Pixel Fold.

Menu zawiera listę wszystkich aplikacji zainstalowanych na urządzeniu. Użytkownicy wybierają aplikację i ustawiają jej format obrazu na 3:4, 1:1, pełny ekran lub inną wartość skonfigurowaną przez producenta urządzenia. Użytkownicy mogą też zresetować współczynnik proporcji do wartości domyślnej aplikacji określonej w pliku manifestu.

Aplikacje mogą zrezygnować z zastąpienia zgodności, ustawiając te tagi PackageManager.Property:


  • PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE

    Aby zrezygnować z zastępowania zastępowania zgodności współczynnika proporcji obrazu użytkownika, dodaj tę właściwość do pliku manifestu aplikacji i ustaw wartość na false:

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

    Twoja aplikacja zostanie wykluczona z listy aplikacji w ustawieniach urządzenia. Użytkownicy nie będą mogli zastąpić formatu obrazu aplikacji.

    Ustawienie właściwości na true niczego nie zmieni.


  • PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_FULLSCREEN_OVERRIDE

    Aby zrezygnować z trybu pełnoekranowego w ramach zastępowania zgodności formatu obrazu użytkownika, dodaj tę właściwość do pliku manifestu aplikacji i ustaw wartość na false:

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

    Opcja pełnego ekranu zostanie usunięta z listy opcji formatu obrazu w ustawieniach urządzenia. Użytkownicy nie będą mogli zastępować ustawień pełnego ekranu w Twojej aplikacji.

    Ustawienie dla tej właściwości ustawienia true nie spowoduje żadnego efektu.

Zoptymalizuj aplikację pod kątem dużych ekranów: nie ustawiaj w aplikacji ograniczeń dotyczących formatu obrazu. Użyj klas rozmiarów okien, aby obsługiwać różne układy w zależności od ilości dostępnego miejsca na wyświetlacz.

Zastąpienia producenta urządzenia na podstawie aplikacji

Producenci urządzeń stosują zastąpienia dla poszczególnych aplikacji i niektórych urządzeń. Pixel Tablet i Pixel Fold domyślnie stosują niektóre zastąpienia w różnych aplikacjach.

Aplikacje mogą zrezygnować z większości zastąpień (patrz tabela Zastąpienia dla poszczególnych aplikacji poniżej).

Aplikację z włączonymi lub wyłączonymi zastąpieniami możesz przetestować za pomocą platformy zgodności (więcej informacji znajdziesz w artykule o narzędziach platformy zgodności). Gdy ta opcja jest włączona, zastąpienia będą miały zastosowanie do całej aplikacji.

Możesz też użyć narzędzia Android Debug Bridge (adb), aby włączyć lub wyłączyć zastąpienia i określić, które zastąpienia mają zastosowanie do Twojej aplikacji.

Włącz lub wyłącz zastąpienia w ten sposób:

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

W przypadku urządzeń Pixel Tablet i Pixel Fold sprawdź, które zastąpienia mają zastosowanie do Twojej aplikacji:

adb shell dumpsys platform_compat | grep <package name>

W tabeli poniżej znajdziesz dostępne zastąpienia oraz wskazówki dotyczące optymalizacji aplikacji w taki sposób, aby nie wymagała ona zastąpienia. Aby zrezygnować z niektórych zastąpień, możesz dodać do pliku manifestu aplikacji flagi usługi.

Zastąpienia na poziomie aplikacji
Typ Nazwa ID Opis
Możliwość zmiany rozmiaru FORCE_RESIZE_APP 174042936 Pomija tryb zgodności rozmiaru w przypadku aplikacji po zmianie konfiguracji.
FORCE_NON_RESIZE_APP 181136395 Po zmianie konfiguracji wymusza na aplikacji tryb zgodności rozmiaru.
Format obrazu OVERRIDE_MIN_ASPECT_RATIO 174042980 Zastępowanie bramy, które musi być włączone, aby można było zastosować inne zastąpienia formatu obrazu.
OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY 203647190 Jeśli ta opcja jest włączona (ustawienie domyślne), limity zastępują zakres tylko w przypadku aktywności w orientacji pionowej.
OVERRIDE_MIN_ASPECT_RATIO_MEDIUM 180326845 Zmienia minimalny format obrazu na 3:2.
OVERRIDE_MIN_ASPECT_RATIO_LARGE 180326787 Zmienia minimalny format obrazu na 16:9.
OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN 208648326 Zmienia minimalny współczynnik proporcji, aby pasował do 50% rozmiaru wyświetlacza (lub współczynnika proporcji podzielonego ekranu).
OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN 218959984 Wyłącza zastępowanie minimalnego formatu obrazu, aby aplikacje były wyświetlane na pełnym ekranie, gdy urządzenie jest ustawione pionowo.
Orientacja OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT 265452344 Zastępuje orientację pionową, gdy aktywność ma niezdefiniowaną orientację.
OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR (OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR) 265451093 Zastępuje orientację nosensor (użyj naturalnej orientacji urządzenia), gdy aktywność ma niezdefiniowaną orientację.
OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE 266124927 Obraca aplikacje tylko w orientacji poziomej o 180 stopni.
OVERRIDE_ANY_ORIENTATION 265464455 Umożliwia zastąpienie dowolnej orientacji.
OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA 265456536 Ogranicza zakres zastępowania orientacji do czasu podłączenia aplikacji do kamery.
OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION 255940284 Ustawia na pełnym ekranie stałą naturalną orientację poziomą (także z czarnymi pasami).
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION 254631730 Ignoruje żądania orientacji wysyłane przez aplikację, aby uniknąć zapętleń obrotu.
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED 273509367 Ignoruje powtarzające się prośby o orientację podczas ponownego uruchamiania aktywności. Jeśli Android wykryje, że aplikacja prosi o co najmniej 2 nowe orientacje w ciągu 1 sekundy, system uzna to za pętlę i zastępuje zastąpienie.
OVERRIDE_RESPECT_REQUESTED_ORIENTATION (OVERRIDE_RESPECT_REQUESTED_ORIENTATION) 236283604 Zapobiega tworzeniu czarnych pasów dzięki wyłączeniu ustawienia ignorowania żądań orientacji urządzenia przez producenta urządzenia.
Interfejsy API piaskownicy NEVER_SANDBOX_DISPLAY_APIS 184838306 Uniemożliwia zmianę działania interfejsów API wyświetlania.
ALWAYS_SANDBOX_DISPLAY_APIS 185004937 Wymusza, by interfejsy API Display w aplikacji zwracały wartości graniczne aplikacji. Interfejsy Display API zwracają granice obszaru wyświetlania, ale czasami aplikacja zakłada te wartości, co prowadzi do problemów z interfejsem.
OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS 237531167 Wymusza, aby interfejsy API View używane w aplikacji zwracały wartości graniczne aplikacji. Interfejs API widoku danych zwraca granice obszaru wyświetlania, ale czasami aplikacja zakłada, że wartości interfejsu API widoku danych zwracają wartości aplikacji, co prowadzi do problemów z interfejsem użytkownika.
Kompatybilność z aparatem OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION 263959004 Wyłącza wymuszanie obrotu. Domyślnie wszystkie aplikacje z aparatem o stałej orientacji mają obracanie się po otwarciu podglądu aparatu.
OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH 264304459 Usuwa domyślne twarde odświeżanie stosowane, gdy wymuszony jest obrócenie podglądu aparatu.
OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE 264301586 Przełącza twarde odświeżanie na łagodne, gdy wymuszony jest obrócenie podglądu aparatu, co pomaga zachować stan podczas wymuszonego obrotu. Domyślnie Android stosuje twarde odświeżanie, gdy wymuszony jest obrócenie podglądu aparatu. Twarde odświeżanie może powodować problemy, w zależności od sposobu przechowywania niektórych aplikacji w pamięci podręcznej.
OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT 250678880 Przycina bufor obrazu wewnętrznego przedniego aparatu. Jeśli zastępowanie jest wyłączone, przycinanie przedniego aparatu jest usuwane, a pole widzenia w podglądzie aparatu staje się większe. Gdy korzystasz z wewnętrznego przedniego aparatu, domyślnie na urządzeniu Pixel Fold system przycina podgląd wszystkich aplikacji aparatu.
Inne OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS 263259275 Zapobiega przyciemnieniu aplikacji, gdy nie jest ona już widoczna w trybie podzielonego ekranu. Aplikacja czeka na zaznaczenie przed narysowaniem zawartości, co może spowodować jej zablokowanie lub zaciemnienie. Dzięki temu Android może wysyłać do aplikacji fałszywe zdarzenie skupienia, które informuje ją, że ma wznowić rysowanie treści.

WYPUŚĆ_APLIKACJĘ

Wymusza możliwość zmiany rozmiaru pakietów, do których zastosowano zastąpienie. Nie ma wpływu na to, czy aplikację można włączyć w tryb wielu okien, ale umożliwia zmianę rozmiaru aplikacji bez włączania trybu zgodności rozmiaru podczas zmiany rozmiaru ekranu.

Jak aplikacje mogą osiągnąć taki sam efekt jako zastępowanie

Ustaw atrybut android:resizeableActivity na wartość prawda lub ustaw flagę metadanych android.supports_size_changes na wartość prawda (aby obsługiwać zmianę rozmiaru przy jednoczesnym wyłączeniu trybu wielu okien z ustawieniem android:resizeableActivity ustawionym na fałsz) w manifeście aplikacji.

Optymalizacja aplikacji

Używaj układów elastycznych/adaptacyjnych, aby umożliwić aplikacjom dostosowywanie się do wszystkich rozmiarów wyświetlaczy i formatów obrazu. Zobacz Obsługa różnych rozmiarów ekranu.

Jak wyłączyć zastępowanie lub z niego zrezygnować

Ustaw flagę właściwości PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES na false (fałsz).

Flagi usługi, które należy dostosować zastąpienie

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

polecenia adb do przetestowania zastąpienia

Aby zastosować zastępowanie i włączyć możliwość zmiany rozmiaru aplikacji:

adb shell am compat enable FORCE_RESIZE_APP <package>

Aby usunąć zastąpienie:

adb shell am compat disable FORCE_RESIZE_APP <package>

Uwaga: te polecenia służą tylko do tymczasowego stosowania lub usuwania zastąpienia.

APLIKACJA FORCE_NON_RESIZE_APP

Powoduje, że nie można zmienić rozmiaru pakietów, do których zastosowano zastąpienie, i powoduje przejście w tryb zgodności rozmiaru po zmianie konfiguracji.

Jak aplikacje mogą osiągnąć taki sam efekt jako zastępowanie

Ustaw zarówno atrybut android:resizeableActivity, jak i flagę metadanych android.supports_size_changes na false w manifeście aplikacji i zadeklaruj ograniczenie orientacji lub formatu obrazu.

Optymalizacja aplikacji

W przypadku wszystkich aplikacji, które działają dobrze po zmianie rozmiaru, ustawienie android:resizeableActivity lub android.supports_size_changes musi mieć wartość Prawda. Inne aplikacje powinny działać lepiej po zmianie rozmiaru. Patrz android:resizeableActivity.

Jak wyłączyć zastępowanie lub z niego zrezygnować

Ustaw flagę właściwości PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES na false (fałsz).

Flagi usługi, które należy dostosować zastąpienie

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

polecenia adb do przetestowania zastąpienia

Aby zastosować zastąpienie i nie można zmienić rozmiaru aplikacji:

adb shell am compat enable FORCE_NON_RESIZE_APP <package>

Aby usunąć zastąpienie:

adb shell am compat disable FORCE_NON_RESIZE_APP <package>

Uwaga: te polecenia służą tylko do tymczasowego stosowania lub usuwania zastąpienia.

OVERRIDE_MIN_ASPECT_RATIO

Kontroler w przypadku wszystkich zabiegów, które wymuszają określony minimalny współczynnik proporcji.

Jak aplikacje mogą osiągnąć taki sam efekt jako zastępowanie

Ustaw android:minAspectRatio na poziomie aktywności lub aplikacji.

Optymalizacja aplikacji

Nie należy ustawiać ograniczeń formatu obrazu w aplikacji. Upewnij się, że aplikacja obsługuje różne rozmiary ekranu. Za pomocą klas rozmiaru okna możesz obsługiwać różne układy w zależności od ilości miejsca na ekranie. Więcej informacji znajdziesz w artykułach Compose WindowSizeClass API i View WindowSizeClass API.

Jak wyłączyć zastępowanie lub z niego zrezygnować

Określ ograniczenie formatu obrazu lub ustaw flagę właściwości PROPERTY_COMPAT_ALLOW_MIN_ASPECT_RATIO_OVERRIDE na false (fałsz).

Flagi usługi, które należy dostosować zastąpienie

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

polecenia adb do przetestowania zastąpienia

Aby zastosować zastąpienie:

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO <package>

Aby usunąć zastąpienie:

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO <package>

Uwaga: te polecenia służą tylko do tymczasowego stosowania lub usuwania zastąpienia.

OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_TYLKO

Ogranicza opcje, które wymuszają określony minimalny format obrazu w przypadku aktywności w orientacji pionowej. Ta opcja jest domyślnie włączona i działa tylko wtedy, gdy włączona jest też zasada OVERRIDE_MIN_ASPECT_RATIO.

Jak aplikacje mogą osiągnąć taki sam efekt jako zastępowanie

Zobacz OVERRIDE_MIN_ASPECT_RATIO.

Optymalizacja aplikacji

Zobacz OVERRIDE_MIN_ASPECT_RATIO.

Jak wyłączyć zastępowanie lub z niego zrezygnować

Zobacz OVERRIDE_MIN_ASPECT_RATIO.

Flagi usługi, które należy dostosować zastąpienie

Zobacz OVERRIDE_MIN_ASPECT_RATIO.

polecenia adb do przetestowania zastąpienia

Aby zastosować zastąpienie:

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY <package>

Aby usunąć zastąpienie:

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY <package>

Uwaga: te polecenia służą tylko do tymczasowego stosowania lub usuwania zastąpienia.

OVERRIDE_MIN_ASPECT_RATIO_MEDIUM

Ustawia minimalny współczynnik proporcji aktywności na średnią wartość (3:2)

Jak aplikacje mogą osiągnąć taki sam efekt jako zastępowanie

Zobacz OVERRIDE_MIN_ASPECT_RATIO.

Optymalizacja aplikacji

Zobacz OVERRIDE_MIN_ASPECT_RATIO.

Jak wyłączyć zastępowanie lub z niego zrezygnować

Zobacz OVERRIDE_MIN_ASPECT_RATIO.

Flagi usługi, które należy dostosować zastąpienie

Zobacz OVERRIDE_MIN_ASPECT_RATIO.

polecenia adb do przetestowania zastąpienia

Aby zastosować zastąpienie:

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_MEDIUM <package>

Aby usunąć zastąpienie:

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_MEDIUM <package>

Uwaga: te polecenia służą tylko do tymczasowego stosowania lub usuwania zastąpienia.

OVERRIDE_MIN_ASPECT_RATIO_LARGE

Ustawia minimalny współczynnik proporcji aktywności na dużą wartość (16:9)

Jak aplikacje mogą osiągnąć taki sam efekt jako zastępowanie

Zobacz OVERRIDE_MIN_ASPECT_RATIO.

Optymalizacja aplikacji

Zobacz OVERRIDE_MIN_ASPECT_RATIO.

Jak wyłączyć zastępowanie lub z niego zrezygnować

Zobacz OVERRIDE_MIN_ASPECT_RATIO.

Flagi usługi, które należy dostosować zastąpienie

Zobacz OVERRIDE_MIN_ASPECT_RATIO.

polecenia adb do przetestowania zastąpienia

Aby zastosować zastąpienie:

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_LARGE <package>

Aby usunąć zastąpienie:

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_LARGE <package>`

Uwaga: te polecenia służą tylko do tymczasowego stosowania lub usuwania zastąpienia.

OVERRIDE_MIN_ASPECT_RATIO_DO_ALIGN_WITH_SPLIT_SCREEN

Włącza podzielony ekran. Pozwala aplikacji na wykorzystanie całego dostępnego miejsca w trybie podzielonego ekranu, unikając efektu czarnych pasów.

Jak aplikacje mogą osiągnąć taki sam efekt jako zastępowanie

Zobacz OVERRIDE_MIN_ASPECT_RATIO.

Optymalizacja aplikacji

Zobacz OVERRIDE_MIN_ASPECT_RATIO.

Jak wyłączyć zastępowanie lub z niego zrezygnować

Zobacz OVERRIDE_MIN_ASPECT_RATIO.

Flagi usługi, które należy dostosować zastąpienie

Zobacz OVERRIDE_MIN_ASPECT_RATIO.

polecenia adb do przetestowania zastąpienia

Aby zastosować zastąpienie:

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN <package>

Aby usunąć zastąpienie:

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN <package>

Uwaga: te polecenia służą tylko do tymczasowego stosowania lub usuwania zastąpienia.

OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN

Wyłącza zastąpienie minimalnego współczynnika proporcji na pełnym ekranie w orientacji pionowej, by wykorzystać całe dostępne miejsce na ekranie.

Jak aplikacje mogą osiągnąć taki sam efekt jako zastępowanie

Zobacz OVERRIDE_MIN_ASPECT_RATIO.

Optymalizacja aplikacji

Zobacz OVERRIDE_MIN_ASPECT_RATIO.

Jak wyłączyć zastępowanie lub z niego zrezygnować

Zobacz OVERRIDE_MIN_ASPECT_RATIO.

Flagi usługi, które należy dostosować zastąpienie

Zobacz OVERRIDE_MIN_ASPECT_RATIO.

polecenia adb do przetestowania zastąpienia

Aby zastosować zastąpienie:

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN <package>

Aby usunąć zastąpienie:

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN <package>

Uwaga: te polecenia służą tylko do tymczasowego stosowania lub usuwania zastąpienia.

OVERRIDE_UNDEFINED_ORIENTATION_NA_PIONOWEJ

Włącza orientację pionową dla wszystkich aktywności w pakiecie. Jeśli nie włączono OVERRIDE_ANY_ORIENTATION, zastąpienie jest używane tylko wtedy, gdy aktywność nie określa innej stałej orientacji.

Jak aplikacje mogą osiągnąć taki sam efekt jako zastępowanie

Ustaw atrybut activity:screenOrientation w pliku manifestu lub użyj interfejsu API Activity#setRequestedOrientation.

Optymalizacja aplikacji

Aplikacja powinna obsługiwać wszystkie orientacje. Zmiana orientacji to zmiana konfiguracji, która może być realizowana na 2 sposoby: przez umożliwienie systemowi zniszczenia i odtworzenie aplikacji lub samodzielne zarządzanie zmianami w konfiguracji. Jeśli samodzielnie zarządzasz zmianami konfiguracji, możesz zachować stan aplikacji za pomocą narzędzia ViewModel. W bardzo nielicznych przypadkach możesz zablokować orientację tylko na małych ekranach, ale może to nie pozwolić na skalowanie w taki sposób, aby użytkownik mógł obracać aplikację zgodnie z potrzebami. W Androidzie 12L i nowszych stałą orientację można zastąpić przez konfigurację urządzenia. Więcej informacji o obsłudze zmian konfiguracji i obsłudze wszystkich orientacji znajdziesz w artykułach Obsługa zmian konfiguracji, Omówienie modelu ViewModel i Ograniczenie orientacji aplikacji na telefonach, ale nie na urządzeniach z dużym ekranem.

Jak wyłączyć zastępowanie lub z niego zrezygnować

Ustaw flagę właściwości PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE na false (fałsz).

Flagi usługi, które należy dostosować zastąpienie

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

polecenia adb do przetestowania zastąpienia

Aby zastosować zastąpienie:

adb shell am compat enable OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT <package>

Aby usunąć zastąpienie:

adb shell am compat disable OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT <package>

Uwaga: te polecenia służą tylko do tymczasowego stosowania lub usuwania zastąpienia.

OVERRIDE_UNDEFINED_ORIENTATION_NA_NOSENSOR

Włącza orientację nosensor dla wszystkich aktywności w pakiecie. Jeśli nie włączono OVERRIDE_ANY_ORIENTATION, zastąpienie jest używane tylko wtedy, gdy aktywność nie określa innej stałej orientacji.

Jak aplikacje mogą osiągnąć taki sam efekt jako zastępowanie

Ustaw atrybut activity:screenOrientation w pliku manifestu lub użyj interfejsu API Activity#setRequestedOrientation.

Optymalizacja aplikacji

Zobacz OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT.

Jak wyłączyć zastępowanie lub z niego zrezygnować

Ustaw flagę właściwości PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE na false (fałsz).

Flagi usługi, które należy dostosować zastąpienie

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

polecenia adb do przetestowania zastąpienia

Aby zastosować zastąpienie:

adb shell am compat enable OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR <package>

Aby usunąć zastąpienie:

adb shell am compat disable OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR <package>

Uwaga: te polecenia służą tylko do tymczasowego stosowania lub usuwania zastąpienia.

OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE

Umożliwia włączanie orientacji odwrotnej w przypadku wszystkich aktywności w pakiecie. Jeśli nie włączono OVERRIDE_ANY_ORIENTATION, zastąpienie jest używane tylko wtedy, gdy aktywność nie określa innej stałej orientacji.

Jak aplikacje mogą osiągnąć taki sam efekt jako zastępowanie

Ustaw atrybut activity:screenOrientation w pliku manifestu lub użyj interfejsu API Activity#setRequestedOrientation.

Optymalizacja aplikacji

Zobacz OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT.

Jak wyłączyć zastępowanie lub z niego zrezygnować

Ustaw flagę właściwości PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE na false (fałsz).

Flagi usługi, które należy dostosować zastąpienie

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

polecenia adb do przetestowania zastąpienia

Aby zastosować zastąpienie:

adb shell am compat enable OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE <package>

Aby usunąć zastąpienie:

adb shell am compat disable OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE <package>

Uwaga: te polecenia służą tylko do tymczasowego stosowania lub usuwania zastąpienia.

OVERRIDE_ANY_ORIENTATION

Zezwala na zastąpienie dowolnej orientacji OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT, OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR i OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE.

Jak aplikacje mogą osiągnąć taki sam efekt jako zastępowanie

Ustaw atrybut activity:screenOrientation w pliku manifestu lub użyj interfejsu API Activity#setRequestedOrientation.

Optymalizacja aplikacji

Zobacz OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT.

Jak wyłączyć zastępowanie lub z niego zrezygnować

Ustaw flagę właściwości PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE na false (fałsz).

Flagi usługi, które należy dostosować zastąpienie

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

polecenia adb do przetestowania zastąpienia

Aby zastosować zastąpienie:

adb shell am compat enable OVERRIDE_ANY_ORIENTATION <package>

Aby usunąć zastąpienie:

adb shell am compat disable OVERRIDE_ANY_ORIENTATION <package>

Uwaga: te polecenia służą tylko do tymczasowego stosowania lub usuwania zastąpienia.

OVERRIDE_ORIENTATION_TYLKO_DLA_APARATU

Limity: OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT, OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR i OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE obowiązują tylko wtedy, gdy połączenie z kamerą jest aktywne.

Jak aplikacje mogą osiągnąć taki sam efekt jako zastępowanie

Ustaw atrybut activity:screenOrientation w pliku manifestu lub użyj interfejsu API Activity#setRequestedOrientation.

Optymalizacja aplikacji

Zobacz OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT.

Jak wyłączyć zastępowanie lub z niego zrezygnować

Ustaw flagę właściwości PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE na false (fałsz).

Flagi usługi, które należy dostosować zastąpienie

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

polecenia adb do przetestowania zastąpienia

Aby zastosować zastąpienie:

adb shell am compat enable OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA <package>

Aby usunąć zastąpienie:

adb shell am compat disable OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA <package>

Uwaga: te polecenia służą tylko do tymczasowego stosowania lub usuwania zastąpienia.

OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION:

Ogranicza orientację ekranu do naturalnej orientacji poziomej, gdy są spełnione te warunki:

  • Aktywność jest wyświetlana w trybie pełnoekranowym
  • Właściwość komponentu PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE z możliwością rezygnacji nie jest włączona
  • Ustawienie ignorowania prośby producenta urządzenia o zignorowanie orientacji jest włączone dla wyświetlacza
  • Wyświetlacz ma naturalną orientację poziomą.

Jak aplikacje mogą osiągnąć taki sam efekt jako zastępowanie

Nie dotyczy. Zadanie należy rozwiązać w logice aplikacji.

Optymalizacja aplikacji

Zobacz OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT.

Jak wyłączyć zastępowanie lub z niego zrezygnować

Ustaw flagę właściwości PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE na false (fałsz).

Flagi usługi, które należy dostosować zastąpienie

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

polecenia adb do przetestowania zastąpienia

Aby zastosować zastąpienie:

adb shell am compat enable OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION <package>

Aby usunąć zastąpienie:

adb shell am compat disable OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION <package>

Uwaga: te polecenia służą tylko do tymczasowego stosowania lub usuwania zastąpienia.

OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION (ZGODNOŚĆ_ZOSTAWIEŃ_IGNORE_REQUESTED_ORIENTATION)

Włącza zasadę zgodności, która pomija aktualizowanie orientacji aplikacji w odpowiedzi na wywołanie aplikacji Activity#setRequestedOrientation(), gdy aplikacja jest ponownie uruchamiana lub ma aktywną funkcję zgodności z kamerą.

Jak aplikacje mogą osiągnąć taki sam efekt jako zastępowanie

Ustaw flagę właściwości PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION na wartość true.

Optymalizacja aplikacji

Zobacz OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT.

Jak wyłączyć zastępowanie lub z niego zrezygnować

Ustaw flagę właściwości PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION na false (fałsz).

Flagi usługi, które należy dostosować zastąpienie

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

polecenia adb do przetestowania zastąpienia

Aby zastosować zastąpienie:

adb shell am compat enable OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION <package>

Aby usunąć zastąpienie:

adb shell am compat disable OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION <package>

Uwaga: te polecenia służą tylko do tymczasowego stosowania lub usuwania zastąpienia.

OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED

Włącza zasadę zgodności, która ignoruje żądaną orientację aplikacji w odpowiedzi na wywołanie Activity#setRequestedOrientation() więcej niż 2 razy w ciągu sekundy, jeśli w przypadku aktywności nie ma czarnych pasów w ustalonej orientacji.

Jak aplikacje mogą osiągnąć taki sam efekt jako zastępowanie

Nie dotyczy. Zadanie należy rozwiązać w logice aplikacji.

Optymalizacja aplikacji

Zobacz OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT.

Jak wyłączyć zastępowanie lub z niego zrezygnować

Ustaw flagę właściwości PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED na false (fałsz).

Flagi usługi, które należy dostosować zastąpienie

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

polecenia adb do przetestowania zastąpienia

Aby zastosować zastąpienie:

adb shell am compat enable OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED <package>

Aby usunąć zastąpienie:

adb shell am compat disable OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED <package>

Uwaga: te polecenia służą tylko do tymczasowego stosowania lub usuwania zastąpienia.

OVERRIDE_RESPECT_REQUESTED_ORIENTATION (ZASTĄPANIE_żądania_REKLAM)

Nie uwzględnia pakietów ignorowania żądań orientacji, które producenci mogą włączyć na obszarze wyświetlania lub na całym ekranie.

Jak aplikacje mogą osiągnąć taki sam efekt jako zastępowanie

Nie dotyczy. Zadanie należy rozwiązać w logice aplikacji.

Optymalizacja aplikacji

Zobacz OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT.

Jak wyłączyć zastępowanie lub z niego zrezygnować

Bez możliwości rezygnacji. Wyłączenie zastępowania może być niebezpieczne, jeśli aplikacja jest niezgodna z urządzeniem, na którym producent urządzenia ma włączone ustawienie ignorowania żądań orientacji. Aby wyłączyć zastępowanie, skontaktuj się z zespołem ds. relacji z deweloperami Androida.

Flagi usługi, które należy dostosować zastąpienie

Brak flag właściwości dla tego zastąpienia.

polecenia adb do przetestowania zastąpienia

Aby zastosować zastąpienie:

adb shell am compat enable OVERRIDE_RESPECT_REQUESTED_ORIENTATION <package>

Aby usunąć zastąpienie:

adb shell am compat disable OVERRIDE_RESPECT_REQUESTED_ORIENTATION <package>

Uwaga: te polecenia służą tylko do tymczasowego stosowania lub usuwania zastąpienia.

NEVER_SANDBOX_DISPLAY_APIS

Wymusza, aby do aktywności w trybie zgodności z czarnymi pasami lub w trybie zgodności rozmiaru nie była stosowana piaskownica interfejsu API Display. Interfejsy API Display nadal zapewniają granice obszaru wyświetlania

Jak aplikacje mogą osiągnąć taki sam efekt jako zastępowanie

Zadeklaruj działania, których rozmiar można zmieniać, ustawiając wartość atrybutu manifestu android:resizeableActivity na wartość true lub flagę metadanych android.supports_size_changes na wartość true.

Optymalizacja aplikacji

Aplikacje, w przypadku których zadeklarowano, że mają możliwość zmiany rozmiaru, nie powinny nigdy ustalać pozycji elementów interfejsu na podstawie rozmiaru interfejsu. Przejdź na aktualne interfejsy API, które udostępniają WindowMetrics. Jeśli używasz Jetpack Compose, wykorzystaj interfejs API WindowSizeClass, aby narysować interfejs w zależności od tego, jaki obszar ekranu ma aplikacja na bieżącym wyświetlaczu. Zobacz Obsługa różnych rozmiarów ekranu.

Jak wyłączyć zastępowanie lub z niego zrezygnować

Bez możliwości rezygnacji. Migracja z wycofanych interfejsów API

Flagi usługi, które należy dostosować zastąpienie

Brak flag właściwości dla tego zastąpienia.

polecenia adb do przetestowania zastąpienia

Aby zastosować zastąpienie:

adb shell am compat enable NEVER_SANDBOX_DISPLAY_APIS <package>

Aby usunąć zastąpienie:

adb shell am compat disable NEVER_SANDBOX_DISPLAY_APIS <package>

Uwaga: te polecenia służą tylko do tymczasowego stosowania lub usuwania zastąpienia.

ALWAYS_SANDBOX_DISPLAY_APIS

Wymusza, aby pakiety zawsze miały zastosowane piaskownica interfejsu API Display niezależnie od trybu okna. Interfejsy API Display zawsze określają granice aplikacji.

Jak aplikacje mogą osiągnąć taki sam efekt jako zastępowanie

Zadeklaruj działania, których nie można zmienić, ustawiając wartość atrybutu android:resizeableActivity na fałsz lub wartość flagi metadanych android.supports_size_changes na wartość fałsz.

Optymalizacja aplikacji

Aplikacje, w przypadku których zadeklarowano, że mają możliwość zmiany rozmiaru, nie powinny nigdy ustalać pozycji elementów interfejsu na podstawie rozmiaru interfejsu. Przenieś swoją aplikację z wycofanych interfejsów API z aktualnych interfejsów API, które udostępniają WindowMetrics. Zobacz WindowMetricsCalculator.

Jak wyłączyć zastępowanie lub z niego zrezygnować

Bez możliwości rezygnacji. Migracja z wycofanych interfejsów API

Flagi usługi, które należy dostosować zastąpienie

Brak flag właściwości dla tego zastąpienia.

polecenia adb do przetestowania zastąpienia

Aby zastosować zastąpienie:

adb shell am compat enable ALWAYS_SANDBOX_DISPLAY_APIS <package>

Aby usunąć zastąpienie:

adb shell am compat disable ALWAYS_SANDBOX_DISPLAY_APIS <package>

Uwaga: te polecenia służą tylko do tymczasowego stosowania lub usuwania zastąpienia.

OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS

Wymusza, aby pakiety znalazły się w piaskownicy między tymi interfejsami API View w granicach aktywności:

Jak aplikacje mogą osiągnąć taki sam efekt jako zastępowanie

Rozwiąż problem w kodzie aplikacji, używając interfejsów API, które określają granice okna aplikacji i przesunięć względem okna aplikacji, a nie granic wyświetlacza i przesunięć urządzenia względem wyświetlacza urządzenia.

Optymalizacja aplikacji

Aplikacje powinny używać interfejsów API View, biorąc pod uwagę możliwość zastosowania w niej funkcji letterbox i trybu wielu okien. Patrz WindowMetricsCalculator.

Jak wyłączyć zastępowanie lub z niego zrezygnować

Ustaw flagę właściwości PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS na false (fałsz).

Flagi usługi, które należy dostosować zastąpienie

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

polecenia adb do przetestowania zastąpienia

Aby zastosować zastąpienie:

adb shell am compat enable OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS <package>

Aby usunąć zastąpienie:

adb shell am compat disable OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS <package>

Uwaga: te polecenia służą tylko do tymczasowego stosowania lub usuwania zastąpienia.

OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION.

Wyłącza wymuszanie rotacji. Poprawia komfort korzystania z niektórych aplikacji.

Jak aplikacje mogą osiągnąć taki sam efekt jako zastępowanie

Ustaw flagę właściwości PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION na false (fałsz).

Optymalizacja aplikacji

Nie polegaj na orientacji czujnika aparatu w pamięci podręcznej ani informacji o urządzeniu. Wskazówki dotyczące zgodności aparatu znajdziesz w artykułach Wprowadzenie do wizjera aparatu i artykuł Obsługa powierzchni, których rozmiar można zmieniać w aplikacji aparatu.

Jak wyłączyć zastępowanie lub z niego zrezygnować

Ustaw flagę właściwości PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION na wartość true.

Flagi usługi, które należy dostosować zastąpienie

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

polecenia adb do przetestowania zastąpienia

Aby zastosować zastąpienie i usunąć wymuszoną obrót:

adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>

Aby usunąć zastąpienie, co umożliwia wymuszenie rotacji:

adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>

Uwaga: te polecenia służą tylko do tymczasowego stosowania lub usuwania zastąpienia.

OVERRIDE_CAMERA_COMPAT_DISABLE_ODŚWIEŻ

Wyłącza odświeżanie aktywności po wymuszeniu rotacji. Poprawia komfort korzystania z aplikacji, gdy odświeżanie powoduje utratę stanu.

Jak aplikacje mogą osiągnąć taki sam efekt jako zastępowanie

Ustaw flagę właściwości PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH na false (fałsz).

Optymalizacja aplikacji

Nie polegaj na orientacji czujnika aparatu w pamięci podręcznej ani informacji o urządzeniu. Wskazówki dotyczące zgodności aparatu znajdziesz w artykułach Wprowadzenie do wizjera aparatu i artykuł Obsługa powierzchni, których rozmiar można zmieniać w aplikacji aparatu.

Jak wyłączyć zastępowanie lub z niego zrezygnować

Ustaw flagę właściwości PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH na wartość true.

Flagi usługi, które należy dostosować zastąpienie

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

polecenia adb do przetestowania zastąpienia

Aby zastosować zastąpienie, które spowoduje usunięcie odświeżania aktywności:

adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>

Aby usunąć zastąpienie, co umożliwia odświeżanie aktywności:

adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>

Uwaga: te polecenia służą tylko do tymczasowego stosowania lub usuwania zastąpienia.

OVERRIDE_CAMERA_COMPAT_ENABLE_ODŚWIEŻ_WSTRZYMANIE_PAUZA

Sprawia, że pakiety, które są używane do odświeżania aktywności, za pomocą funkcji onResume()onPause() → cykl onResume(), a nie onResume()onStop()onResume() po wymuszeniu rotacji zgodnie z kamerą.

Jak aplikacje mogą osiągnąć taki sam efekt jako zastępowanie

Ustaw flagę właściwości PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE na wartość true.

Optymalizacja aplikacji

Nie polegaj na orientacji czujnika aparatu w pamięci podręcznej ani informacji o urządzeniu. Wskazówki dotyczące zgodności aparatu znajdziesz w artykułach Wprowadzenie do wizjera aparatu i artykuł Obsługa powierzchni, których rozmiar można zmieniać w aplikacji aparatu.

Jak wyłączyć zastępowanie lub z niego zrezygnować

Ustaw flagę właściwości PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE na false (fałsz).

Flagi usługi, które należy dostosować zastąpienie

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

polecenia adb do przetestowania zastąpienia

Aby zastosować zastąpienie:

adb shell am compat enable OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE <package>

Aby usunąć zastąpienie:

adb shell am compat disable OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE <package>

Uwaga: te polecenia służą tylko do tymczasowego stosowania lub usuwania zastąpienia.

OVERRIDE_CAMERA_LANDSCAPE_NA_PIONOWEJ

Wymusza przycięcie obrazu wyjściowego kamery do odwrotnej orientacji, gdy pionowa orientacja aparatu nie odpowiada naturalnej orientacji urządzenia. Wiele aplikacji nie radzi sobie z tą sytuacją i w innym przypadku wyświetla rozciągnięte obrazy.

Jak aplikacje mogą osiągnąć taki sam efekt jako zastępowanie

Ustaw flagę właściwości PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT na wartość true.

Optymalizacja aplikacji

Nie polegaj na orientacji czujnika aparatu w pamięci podręcznej ani informacji o urządzeniu. Wskazówki dotyczące zgodności aparatu znajdziesz w artykułach Wprowadzenie do wizjera aparatu i artykuł Obsługa powierzchni, których rozmiar można zmieniać w aplikacji aparatu.

Jak wyłączyć zastępowanie lub z niego zrezygnować

Ustaw flagę właściwości PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT na false (fałsz).

Flagi usługi, które należy dostosować zastąpienie

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

polecenia adb do przetestowania zastąpienia

Aby zastosować zastąpienie i przyciąć przedni aparat:

adb shell am compat enable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>

Aby usunąć zastąpienie i usunąć przycięcie przedniego aparatu:

adb shell am compat disable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>

Uwaga: te polecenia służą tylko do tymczasowego stosowania lub usuwania zastąpienia.

OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION

Uniemożliwia aplikacjom rezygnację z udostępniania ekranu (patrz Wyświetlanie multimediów). Stosowane, gdy aplikacje niewłaściwie korzystają z interfejsu API createConfigForDefaultDisplay(), aby wymuszać robienie zrzutów ekranu na pełnym ekranie i narażając prywatność użytkowników, ujawniając zawartość powiadomień, które są rejestrowane w trybie pełnoekranowym, ale nie w ramach udostępniania ekranu aplikacji. Dotyczy to też wszystkich aplikacji niezależnie od trybu okna.

Jak aplikacje mogą osiągnąć taki sam efekt jako zastępowanie

Zezwalaj na domyślne zachowanie projekcji multimediów (zaimplementowane w Androidzie 14, poziom API 34 i createScreenCaptureIntent()), dzięki czemu użytkownicy mogą decydować, czy udostępniać cały ekran czy pojedyncze okno aplikacji bez względu na tryb okna. Możesz też wywołać funkcję createScreenCaptureIntent(MediaProjectionConfig) z argumentem MediaProjectionConfig zwróconym z wywołania do createConfigForUserChoice().

Optymalizacja aplikacji

Zezwalaj użytkownikom na włączanie i wyłączanie podczas wyświetlania multimediów całego ekranu urządzenia czy okna aplikacji – od Androida 14 jest to zachowanie domyślne.

Włącz możliwość zmiany rozmiaru aplikacji (resizeableActivity="true"), aby działała w trybie wielu okien.

Jak wyłączyć zastępowanie lub z niego zrezygnować

Ze względu na wagę prywatności użytkownika aplikacja nie może wyłączyć tego zastąpienia ani z niego zrezygnować.

Flagi usługi, które należy dostosować zastąpienie

Brak.

polecenia adb do przetestowania zastąpienia

Aby zastosować zastępowanie, co spowoduje anulowanie rezygnacji aplikacji z udostępniania części ekranu (czyli udostępnianie części ekranu):

adb shell am compat enable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>

Aby usunąć zastąpienie i umożliwić aplikacji zrezygnowanie z udostępniania części ekranu:

adb shell am compat disable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>

Uwaga: te polecenia służą tylko do tymczasowego stosowania lub usuwania zastąpienia.

OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS

Umożliwia wysyłanie fałszywego zaznaczenia z aplikacji w trybie podzielonego ekranu. Niektóre silniki gier oczekują, że aplikacja zostanie zaznaczona, zanim zacznie rysować zawartość aplikacji. Dlatego fałszywy tryb fokusa pomaga uniknąć czarnego zaznaczenia po wznowieniu działania aplikacji i nie jest na niej jeszcze ustawiona ostrość.

Jak aplikacje mogą osiągnąć taki sam efekt jako zastępowanie

Ustaw flagę właściwości PROPERTY_COMPAT_ENABLE_FAKE_FOCUS na wartość true.

Optymalizacja aplikacji

Możesz uniknąć tego problemu, jeśli Twoja aplikacja dobrze obsługuje różne orientacje i zmiany konfiguracji. Dostosuj aplikację do dużego ekranu, postępując zgodnie ze wskazówkami dotyczącymi jakości aplikacji na duży ekran.

Jeśli używasz silnika gry Unity, uaktualnij go do wersji 2019.4.40 lub nowszej i ponownie wyeksportuj grę. Pozostaw zaznaczoną opcję Resizable Window w ustawieniach Android Playera.

Jak wyłączyć zastępowanie lub z niego zrezygnować

Ustaw flagę właściwości PROPERTY_COMPAT_ENABLE_FAKE_FOCUS na false (fałsz).

Flagi usługi, które należy dostosować zastąpienie

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

polecenia adb do przetestowania zastąpienia

Aby zastosować zastąpienie:

adb shell am compat enable OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS <package>

Aby usunąć zastąpienie:

adb shell am compat disable OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS <package>

Uwaga: te polecenia służą tylko do tymczasowego stosowania lub usuwania zastąpienia.

Dodatkowe materiały