Tryb zgodności urządzenia

Android włącza tryb zgodności w przypadku aplikacji, które zadeklarują orientację lub ograniczenia możliwości zmiany rozmiaru. Tryb zgodności zapewnia odpowiednie działanie aplikacji na urządzeń z dużym ekranem i składanych telefonów z klapką, ale ich obsługa nie jest optymalna.

Zastąpienia na poziomie aplikacji umożliwiają producentom urządzeń wprowadzanie zmian działanie aplikacji, aby zwiększyć wygodę użytkowników lub zapobiec jej awariom określonych urządzeniach.

Urządzenia referencyjne

Następujące urządzenia mogą wymagać zastąpień dla poszczególnych aplikacji, ponieważ konfiguracje lub konfiguracje, które nie są dobrze obsługiwane przez aplikacje:

  • Tablety:naturalna orientacja niektórych tabletów, takich jak Pixel Tablet, jest w orientacji poziomej. Urządzenie ma naturalną orientację, gdy: Display#getRotation() za możliwość zwrotu Surface.ROTATION_0 Jeśli aplikacje zakładają, że ROTATION_0 jest w orientacji pionowej, układy aplikacji i podgląd z aparatu mogą nie pasować do wyświetlacza urządzenia.
  • Urządzenia składane w orientacji poziomej: niektóre urządzenia składane, takie jak Pixel Fold, orientacji pionowej po złożeniu i orientacji poziomej po rozłożeniu. Jeśli aplikacje zakładają, że rozłożona orientacja jest pionowa, migotanie z pętlami lub układem.
  • Składane telefony z klapką: rozłożone telefony z klapką są zwykle w orientacji pionowej. orientacji ekranu. Jednak po złożeniu telefon zwykle ma mały wyświetlacz. w orientacji poziomej. Aplikacje muszą identyfikować i uwzględniać różne orientacji wyświetlaczy.

Typowe problemy ze zgodnością

Aplikacje mają najczęściej problemy ze zgodnością z powodu ich orientacji ograniczeń, możliwości zmiany rozmiaru i formatu obrazu, nieprawidłowej obsługi orientacji podglądu z aparatu i niewłaściwie wykorzystywane interfejsy API.

Letterboxing

Format Letterbox umieszcza aplikację na środku ekranu, a na dużych ekranach z jednej strony na drugi, aby można było wygodnie korzystać z niego. Maty (słupki w jednolitym kolorze) lub rozmytej tapety) wypełnić nieużywany obszar wyświetlacza wzdłuż boków lub góry, do dołu aplikacji.

Na urządzeniach z dużym ekranem często pojawiają się czarne pasy ze względu na wymiary format obrazu wyświetlacza urządzenia różni się zwykle od z których korzysta większość aplikacji.

Rysunek 1. Aplikacja dostępna tylko w orientacji pionowej na tablecie w orientacji poziomej i w wersji składanej wyświetla się z czarnymi pasami.

Problem

Aplikacja nie obsługuje wszystkich konfiguracji wyświetlania, ponieważ aplikacja została naprawiona orientacji i stałego formatu obrazu ani możliwości zmiany rozmiaru.

Do ustawień konfiguracji, które kontrolują orientację i zmianę rozmiaru aplikacji, należą: :

  • screenOrientation: określa stałą orientację w przypadku: aplikacji. Aplikacje mogą też ustawiać orientację w czasie działania za pomocą funkcji Activity#setRequestedOrientation()

  • resizeableActivity: wskazuje, czy system może dopasowuje rozmiar aplikacji do okien o różnych wymiarach. Na Androidzie 11 (poziom interfejsu API 30) lub mniejszą, określa, czy aplikacje obsługują tryb wielu okien. Wł. Android 12 (poziom interfejsu API 31) lub nowszy określa, czy aplikacje obsługują tryb wielu okien na małych ekranach klasa rozmiaru okna). Na Androidzie 12 i nowszych obsługa trybu wielu okien na dużych ekranach (średnie lub rozwinięte okno) ) niezależnie od tego ustawienia.

  • maxAspectRatio: określa maksymalny format obrazu. obsługiwanych przez aplikację. Tylko aplikacje z wartością resizeableActivity ustawioną na false mogą ustaw maxAspectRatio.

  • minAspectRatio: określa minimalny format obrazu. obsługiwanych przez aplikację. Tylko aplikacje z wartością resizeableActivity ustawioną na false mogą ustaw minAspectRatio.

Optymalizacja

Aplikacja powinna obsługiwać wszystkie urządzenia i wyświetlacz w trybie wielu okien. orientacji i rozmiarów. Usuń całą orientację i stały format obrazu ograniczeń wynikających z układów aplikacji i pliku manifestu.

Obejście zgodności

Jeśli aplikacja o stałej orientacji lub proporcjach obrazu działa w oknie, w którym aplikacja nie obsługuje bezpośrednio rozmiaru ani orientacji okna, dodaje do aplikacji pasy, aby zachować ciągłość.

Począwszy od Androida 12 (poziom interfejsu API 31) i kolejnego od wersji 12L (poziom interfejsu API 32) stosuje różne ulepszenia w aplikacjach z czarnymi pasami. Urządzenie producenci wdrażają ulepszenia interfejsu użytkownika. Nie musisz robić nic więcej programowania, aby czerpać korzyści z ulepszeń.

Android 12 (poziom interfejsu API 31) wprowadza te ulepszenia estetyczne, mogą być konfigurowane przez producentów urządzeń:

  • Zaokrąglone rogi: rogi okna aplikacji mają bardziej wyrafinowany wygląd.
  • Przezroczystość paska systemowego: paski stanu i nawigacyjne, które nakładają się na są półprzezroczyste, dzięki czemu ikony na paskach są zawsze widoczne tło w formacie letterbox.
  • Konfigurowalny współczynnik proporcji: format obrazu aplikacji można dostosować. aby poprawić wygląd aplikacji.

Rysunek 2. Aplikacja w Letterboxach z ulepszeniami interfejsu.

12L (poziom interfejsu API 32) dodaje te ulepszenia funkcjonalności:

  • Konfigurowalne pozycjonowanie: na dużych ekranach producenci urządzeń mogą można umieścić aplikację z lewej lub prawej strony wyświetlacza, interakcji z nimi.

  • Nowy przycisk ponownego uruchamiania: producenci urządzeń mogą umożliwić ponowne uruchomienie przycisk trybu zgodności rozmiaru z nowym wyglądem w celu lepszego jej rozpoznania przez użytkowników.

Android 13 (poziom interfejsu API 33) dodaje okno z informacjami dla użytkowników na temat pozycjonowania aplikacja z czarnymi pasami na ekranie i w trybie podzielonego ekranu:

Rysunek 3. Aplikacja w literowych pasach z oknem z informacjami dla użytkownika.

Tryb zgodności rozmiaru

Tryb zgodności rozmiaru to czarne pasy z elementem sterującym restartowaniem. umożliwia użytkownikom ponowne uruchomienie aplikacji i ponowne wyświetlenie obrazu. Android wywołuje trybu zgodności rozmiaru w przypadku aplikacji, które nie mają możliwości zmiany rozmiaru. Gdy działanie jest przenoszone do kontenera wyświetlacza niezgodnego z wymiary, system może ponownie przeskalować aplikację, by wypełnić co najmniej 1 wymiar.

Zmiany w konfiguracji urządzenia, które mogą wyzwalać tryb zgodności rozmiaru, obejmują: następujące:

  • Obracanie urządzenia
  • Składanie lub rozkładanie urządzenia
  • Przełączanie się między trybem pełnego ekranu i podzielonego ekranu

Problem

Tryb zgodności rozmiaru ma zazwyczaj zastosowanie do działań, które są ograniczone w orientacja lub współczynnik proporcji. Są one skonfigurowane (lub określane przez system) których rozmiaru nie można zmienić.

Uznaje się, że aplikacja można zmienić rozmiar i nie zostanie powiększona. trybu zgodności – jeśli spełnia dowolne z tych kryteriów:

Jeśli aplikacja nie spełnia żadnego z tych warunków, zostanie uznana za niezgodną z zasadami. z możliwością zmiany rozmiaru i umieszczoną w trybie zgodności z rozmiarem.

Optymalizacja

Aplikacja powinna obsługiwać wszystkie rozmiary reklam displayowych. Zezwól na zmianę rozmiaru aplikacji przez ustawienie Atrybut android:resizeableActivity obiektu <activity> lub <application> do true w manifestu aplikacji. Zaprojektuj elastyczne/adaptacyjne układy aplikacji. Więcej Więcej informacji zawiera Obsługa różnych rozmiarów ekranów i wsparcie tryb wielu okien.

Obejście zgodności

Android włącza tryb zgodności rozmiaru, gdy system określi wyświetlanie aplikacji z czarnymi pasami można poprawić, przeskalując aplikację tak, aby wypełniła co najmniej w jednym wymiarze. System wyświetla element sterujący ponownego uruchamiania który odtwarza proces aplikacji, odtwarza aktywność i ponownie wykorzystuje wyświetlacz. Zobacz też Omówienie procesów i wątków.

Migoczące pętle

Jeśli aplikacja nie obsługuje wszystkich orientacji wyświetlacza, jej wyświetlanie może się powtarzać żądania nowych orientacji w przypadku zmiany konfiguracji, co powoduje utworzenie nieskończona pętla, która powoduje, że wyświetlacz migocze lub aplikacja obraca się w nieskończoność.

Problem

Na Androidzie 12 (poziom interfejsu API 31) i nowszym producenci urządzeń mogą konfigurować ignorują ograniczenia orientacji określone przez aplikacje, a zamiast tego wymuszać tryby zgodności. Urządzenie składane może na przykład zignorować android:screenOrientation="portrait" aktywności ustawienie, gdy aktywność jest wyświetlana na tablecie w orientacji poziomej, na wewnętrznym ekranie.

Jeśli ograniczenia dotyczące orientacji aplikacji zostaną zignorowane, aplikacja może automatycznie ustaw jego orientację, wywołując Activity#setRequestedOrientation() Rozmowa uruchamia ponowne uruchomienie aplikacji, jeśli nie obsługuje zmian konfiguracji (patrz Obsługuj zmiany konfiguracji). Po ponowne uruchomienie, ograniczenia orientacji aplikacji są ponownie ignorowane, wywołanie funkcji setRequestedOrientation() powoduje ponowne uruchomienie aplikacji oraz i tak dalej, w pętli pętli.

Inny sposób napotkania tego problemu: orientacji naturalnej (zwykła orientacja (określonych przez Androida) na ekranie urządzenia jest ustawiony w orientacji poziomej (tzn. funkcja połączenia Zwroty Display#getRotation() Surface.ROTATION_0, gdy urządzenie ma orientację poziomą współczynnik proporcji). Do tej pory aplikacje zakładały, że Display.getRotation() = Surface.ROTATION_0 oznacza, że urządzenie jest w orientacji pionowej, ale tak nie jest. na wewnętrznym ekranie niektórych urządzeń składanych, na niektórych tabletach.

Aplikacja w orientacji poziomej na składanym ekranie wewnętrznym może sprawdzić obrót ekranu, otrzymaj wartość ROTATION_0, przyjmij naturalną orientację urządzenie jest pionowo i wywołaj setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT ), aby ponownie skonfigurować układ aplikacji. Po ponownym uruchomieniu aplikacji (w orientacji poziomej) ), może ponownie sprawdzić obrót ekranu, otrzymać wartość ROTATION_0, zadzwoń setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) i i kontynuować nieskończoną pętlę.

Optymalizacja

Aplikacje nie mogą:

  • Ustaw orientację domyślną za pomocą elementu Activity#setRequestedOrientation() w działania onCreate(), ponieważ żądanie orientacji może być wywołanych nieoczekiwanie przez nieobsłużone zmiany konfiguracji
  • Załóżmy, że naturalna orientacja urządzenia (ROTATION_0) jest pionowa
  • Ustaw orientację na podstawie sygnałów niezwiązanych z bieżącym rozmiarem okna, na przykład jako Display#getRotation(), obecność FoldingFeature lub wycofane interfejsy API.

Obejście zgodności

Android ignoruje połączenia do Activity#setRequestedOrientation() w następujących przypadkach w sytuacjach:

.

Podgląd z aparatu

Podgląd w aparacie (lub wizjer) w aplikacjach aparatu może być niewłaściwie ułożony lub zniekształcony. na tabletach, laptopach i składanych ekranach.

Problem

W dokumencie z definicją zgodności z Androidem stwierdza się, że czujnik obrazu z aparatu „MUSI być ustawiony tak, aby długi wymiar aparatu do długości ekranu”.

Aplikacje często zakładają, że orientacja urządzenia i czujnik aparatu w orientacji pionowej, co jest rozsądnym założeniem w przypadku standardowych telefonów komórkowych. Ale naturalnej orientacji tabletów i laptopów oraz ich czujników aparatu w orientacji poziomej. Ponadto nowe urządzenia, takie jak urządzenia składane, mogą mieć i wielu czujników aparatu w różnych orientacjach.

Rozpoczęcie aktywności w orientacji kamery, której aplikacja nie spodziewa się lub przełączanie się między różnymi aparatami lub ekranami (w przypadku urządzeń składanych) może niewłaściwie ustawiony lub zniekształcony podgląd z aparatu.

Optymalizacja

Aplikacje aparatu muszą prawidłowo rozpoznawać orientację urządzenia i aparat oraz nimi zarządzać orientacji czujnika, aby wyświetlić poprawnie wyrównany i przeskalowany podgląd z aparatu. Aplikacje muszą obliczać obrót urządzenia, obrót czujnika oraz ekran lub okno format obrazu, a następnie zastosować wyniki do podglądu z aparatu. Szczegółowe informacje wskazówki, zapoznaj się z sekcjami Podgląd aparatu i Przedstawiamy Aparat Wizjer.

Obejście zgodności

Urządzenie ma naturalną orientację, gdy Display#getRotation() zwraca Surface.ROTATION_0. System oblicza CameraCharacteristics.SENSOR_ORIENTATION od naturalnej orientacji urządzenia. Android wyrównuje okno pionowe z funkcją ograniczonego wyświetlania w pionie i z naturalną orientacją urządzenia. jest oczekiwana przez większość aplikacji. Android przycina też obraz z czujnika aparatu, gdy Czujnik ma orientację poziomą, a podgląd aparatu – pionowy. Konkretny sposoby obejścia tego problemu obejmują następujące przypadki:

  • Wymuszaj obracanie podglądu aparatu w przypadku aplikacji ograniczonych do orientacji pionowej: aplikacje ograniczona do orientacji pionowej oczekiwana jest naturalna orientacja urządzenia a czujnik aparatu na orientację pionową. Jednak na Androidzie 12 (poziom interfejsu API 31) i wyższych, aplikacje mogą działać w różnych orientacjach urządzeń, producenci urządzeń ignorują specyfikację orientacji.

    Gdy do aparatu podłączona jest aplikacja z ograniczeniem pionowym, Android wymusza obraca aplikację, aby wyrównać jej okno pionowe od orientacji urządzenia.

    Na niektórych tabletach (patrz urządzenia referencyjne) aplikacja i zostanie obrócone do pełnego ekranu pionowego, do naturalnej orientacji urządzenia. Aplikacja zajmuje pełny ekran po zastosowaniu siły i rotacji.

    Na poziomym ekranie wewnętrznym urządzeń składanych (patrz artykuł urządzenia), aktywności tylko w orientacji pionowej są obracane w poziomie, aby wyrównać je do rozłożonej naturalnej orientacji. Ta aplikacja jest z czarnymi pasami po wymuszeniu obrotu.

  • Przycinanie wewnętrznego przedniego aparatu: wewnętrzny czujnik przedniego aparatu urządzenia składane są w orientacji poziomej. Oprócz siły obrotu podgląd z aparatu na składanym wewnętrznym ekranie, Android przycina wewnętrzny przód pole widzenia kamery w orientacji poziomej, tak aby czujnik zarejestruje widok naprzeciwko od orientacji urządzenia.

  • Wymuś odświeżenie podglądów z kamery: system przełącza się między aktywnością metody onStop() i onStart() (domyślnie) lub onPause() i onResume() (zastosowany przez OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE dla poszczególnych aplikacji) po wymuszeniu obrotu, by mieć pewność, że podgląd z aparatu wyświetlają się prawidłowo.

  • Skalowanie formatu obrazu: system dynamicznie zmienia współczynnik proporcji obrazu wymusza obrót podglądu kamery do ustawienia wyższego minimalnego współczynnika proporcji, aby podgląd z aparatu był odpowiednio skalowany.

Deweloperzy aplikacji mogą zastąpić te obejścia, jeśli aplikacje obsługują podgląd z aparatu . Zobacz Zastąpienia na poziomie aplikacji.

Interfejsy API często niewłaściwie używane

W Androidzie dodaliśmy obsługę takich funkcji, jak tryb wielu okien urządzeń, takich jak urządzenia składane, starsze interfejsy API zostały wycofane i zastąpione przez aktualne interfejsy API, które sprawdzają się w przypadku wszystkich rozmiarów wyświetlaczy i różnych formatów urządzeń czynników. Jednak wycofane interfejsy API są nadal dostępne do poprzedniej wersji kompatybilności.

Niektóre interfejsy API View są przeznaczone do specjalnych celów, które nie zawsze działają dobrze zrozumiałe dla programistów.

Problem

Deweloperzy nadal używają wycofanych interfejsów API Display i nieprawidłowo zakładają, że Interfejsy API zwracają granice aplikacji zamiast granic obszaru wyświetlania urządzenia. lub programiści omyłkowo używają interfejsów API widoku specjalnego przeznaczenia, aby uzyskać ogólne dane o wyświetlaniu. Efektem są błędne obliczenia podczas zmiany położenia elementów interfejsu po oknie aplikacji. zmienianie rozmiaru zdarzeń, co powoduje problemy z układem.

Wycofane i często używane interfejsy API w sieci reklamowej:

Więcej informacji: Obsługa trybu wielu okien.

Niewłaściwie użyte interfejsy API widoków:

Optymalizacja

Nigdy nie polegaj na rozmiarze fizycznego wyświetlacza przy określaniu pozycji elementów interfejsu. Przenieś z aplikacji do interfejsów API opartych na WindowMetrics, w tym: WindowManager interfejsów API:

Obejście zgodności

Dwa zastąpienia modyfikują wycofane interfejsy API Display i niewłaściwie wykorzystywane interfejsy API View w celu: zwróci granice aplikacji: ALWAYS_SANDBOX_DISPLAY_APIS dla: Display interfejsy API; OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS. dla View interfejsów API. Pole ALWAYS_SANDBOX_DISPLAY_APIS jest też domyślnie stosowane do: które kwalifikują się do trybu zgodności rozmiaru.

Działania przejrzyste

Aktywności przezroczyste są wynikiem stosowania przezroczystych stylów tła, 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 dialogami, takie jak Theme.MaterialComponents.Dialog, mogą zawierają style, które sprawiają, że działania są przejrzyste.

Działania te nie obejmują całej dostępnej przestrzeni wyświetlania, co sprawia, są trudne do zarządzania, ponieważ dostępny obszar wyświetlania może się zmieniać w zależności zmiany konfiguracji, takie jak obrót urządzenia, składanie i otwieranie urządzenia, tryb wielu okien.

Problem

Aktywność przezroczysta powinna odpowiadać granicom pierwszej aktywności nieprzezroczystej pod przezroczystą aktywnością w stosie działań. Nieprzezroczyste działanie, które powoduje wyświetlenie okna uprawnień, może być trampolina (działanie, które powoduje uruchomienie innej aktywności, a następnie znika); oraz więc system nie może wyznaczyć granic aktywności na trampolinie, uruchomił aktywność z przezroczystego okna uprawnień.

Optymalizacja

Działania przezroczyste dziedziczą swoje ograniczenia z najwyższego poziomu nieprzezroczystego pod nimi w stosu aktywności zadania. Aktywność nieprzezroczysta musi być dostępnych w całym cyklu aktywności przejrzystej, od działania do zniszczenia. Z tego powodu nie uruchamiaj próśb o uprawnienia z zajęcia na trampolinie.

Jeśli aktywność na trampolinie wyświetli prośbę o zgodę, użytkownik może nie zostać widać okno uprawnień, bo aktywność na trampolinie zostać usunięte, zanim użytkownik zdążył odpowiedzieć na okno dialogowe, a które mogły zostać obliczone na podstawie wymiarów i pozycji okna dialogowego nieprawidłowo.

Aplikacje powinny zawsze wysyłać prośby o przyznanie uprawnień pochodzące z aktywności, które pozostają widoczne do czasu podjęcia decyzji o zgodzie.

Zaokrąglone narożniki

Aktywność może być przezroczysta ze względu na styl określający tło przezroczystość lub dlatego, że aktywność nie wypełnia dostępnych do przestrzeni reklamowej. Jeśli dostępną przestrzeń wyświetlania wypełnia przezroczyste działanie, system automatycznie stosuje zaokrąglone narożniki do aktywności, jeśli została skonfigurowana przez producenta urządzenia. Jeśli jednak aktywność (np. okna dialogowego uprawnień) nie wypełnia dostępnego miejsca, wybrać zaokrąglone rogi.

Okna uprawnień nie wypełniają dostępnego obszaru wyświetlania, ponieważ zwykle używa parametru LayoutParams.WRAP_CONTENT, a nie LayoutParams.MATCH_PARENT.

Obejście zgodności

Zachowaj działania, które uruchamiają działania w oknie dialogowym, dopóki nie wykona odpowiedziało na to okno.

System dba o to, aby aktywność przezroczysta dziedziczyła wszystkie ograniczenia z pierwsza nieprzezroczysta aktywność pod przezroczystą aktywnością w stosie aktywności, w tym ograniczenia związane z:

  • Tryb zgodności rozmiaru
  • Orientacja
  • Format obrazu

Gry w jedność

Gry Unity działają na Androidzie na pełnym ekranie lub w trybie wielu okien. Pamiętaj jednak: wiele gier na Unity traci ostrość i przestaje rysować treść po umieszczeniu aplikacji. tryb wielu okien.

Problem

Aplikacja Unity dodała Resizable Window w Unity 2019.4, aby obsługiwać tryb wielu okien na Androidzie. Pamiętaj jednak: początkowa implementacja nie reaguje na cykl życia działania w tryb wielu okien, przez co UnityPlayer, aby zawiesić odtwarzanie, gdy aplikacja przestanie być aktywna. Odtwarzacz wyrenderował lub ostatnia, zablokowana klatka w grze. Gra została wznowiona tylko wtedy, gdy użytkownik dotknij ekranu. Wiele aplikacji korzystających z Unity Engine napotyka ten problem i jako czarne okno w trybie wielu okien.

Optymalizacja

Uaktualnij Unity do wersji 2019.4.40 lub nowszej i ponownie wyeksportuj grę. Zachowaj Opcja Resizable Window zameldowana w Ustawienia odtwarzacza Android, w przeciwnym razie gra zatrzymuje się, gdy jest nieostry, mimo że gra jest w pełni widoczna tryb wielu okien.

Obejście zgodności

Producenci urządzeń mogą stosować OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS dla poszczególnych aplikacji, aby zapewnić fałszywy sygnał dla aplikacji tryb wielu okien. Zastąpienie pozwala aktywności na przeredagowanie treści i nie są zamazane.

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

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

Ma czarne pasy

Sprawdź, czy każda aktywność może wykorzystać cały obszar wyświetlania dostępny dla aplikacji. Najpierw zadeklaruj następujący kod w folderze testowym:

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 uruchom test, aby potwierdzić zachowanie i upewnić się, że działanie docelowe nie jest letterbox:

Kotlin

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

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

Java

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

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

Takie testy najlepiej przeprowadzać tylko do momentu, gdy zakończy się on pomyślnie i nie potwierdzi, że czynności zajmują całą przestrzeń dostępną dla aplikacji. Testowanie aplikacji na wszystkich typach urządzeń, aby zapewnić spójne działanie.

Zastąpienia według aplikacji

Android udostępnia zastąpienia, które zmieniają skonfigurowane działanie aplikacji. Dla: na przykład zastąpienie FORCE_RESIZE_APP instruuje funkcję aby ominąć tryb zgodności rozmiaru i zmienić rozmiar aplikacji, aby dopasować ją do wyświetlacza wymiarów, nawet jeśli resizeableActivity="false" to określone w pliku manifestu aplikacji.

Producenci urządzeń stosują zastąpienia w przypadku wybranych lub wszystkich aplikacji. określonych urządzeniach z dużym ekranem. Na Androidzie 14 (poziom interfejsu API 34) i nowszym mogą zastosować zastąpienia w aplikacjach w ustawieniach urządzenia.

Zastąpienia użytkownika na aplikacje

Na Androidzie 14 i nowszych wersjach menu ustawień umożliwia użytkownikom zmianę proporcji dla aplikacji. Urządzenia z dużym ekranem, np. format referencyjny urządzeń implementują menu.

Menu zawiera listę wszystkich aplikacji zainstalowanych na urządzeniu. Użytkownicy wybierają aplikacji, a następnie ustaw format obrazu na 3:4, 1:1, pełny ekran lub inną wartość skonfigurowany przez producenta urządzenia. Użytkownicy mogą również zresetować proporcje obrazu wartość domyślna aplikacji, która jest określona w manifeście aplikacji.

Aplikacje mogą zrezygnować z zastępowania zgodności, konfigurując te tagi PackageManager.Property:

  • PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE

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

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

    Aplikacja zostanie wykluczona z listy aplikacji w ustawieniach urządzenia. Użytkownicy nie można zastąpić współczynnika proporcji aplikacji.

    Ustawienie właściwości true nie ma żadnego efektu.

  • PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_FULLSCREEN_OVERRIDE

    Aby zrezygnować z opcji wyświetlania na pełnym ekranie w celu zgodności formatu obrazu użytkownika zastąp, dodaj właściwość do pliku manifestu aplikacji i ustaw jej 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ąpić trybu pełnoekranowego do aplikacji.

    Ustawienie tej właściwości na true nie ma żadnego efektu.

.

Zoptymalizuj aplikację pod kątem wszystkich ekranów: nie ustawiaj ograniczeń formatu obrazu w do aplikacji. Używaj klas rozmiaru okna do obsługi różnych układy zgodne z ilością dostępnego miejsca.

Zastąpienia producenta urządzenia według aplikacji

Producenci urządzeń na wybranych urządzeniach stosują zastąpienia w poszczególnych aplikacjach. Urządzenia referencyjne mogą stosować niektóre zastąpienia do wiele aplikacji.

Aplikacje mogą zrezygnować z większości zastąpień (patrz sekcja Dla aplikacji zastąpień poniżej).

Za pomocą funkcji zgodności możesz przetestować aplikację z włączonymi lub wyłączonymi zastąpieniami (zobacz Narzędzia platformy zgodności). Gdy ta opcja jest włączona, zastąpienia mają 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ń referencyjnych sprawdź, które zastąpienia mają zastosowanie do aplikacji:

adb shell dumpsys platform_compat | grep <package name>

W tabeli poniżej znajdziesz dostępne zastąpienia oraz wskazówki na temat zoptymalizować aplikację tak, aby nie musiała korzystać z zastąpień. Możesz dodać do pliku manifestu aplikacji, aby zrezygnować z niektórych zastąpień.

Zastąpienia według aplikacji
Typ Nazwa ID Opis
Możliwość zmiany rozmiaru FORCE_RESIZE_APP 174042936 Pomija tryb zgodności rozmiaru w przypadku zmian w konfiguracji aplikacji.
FORCE_NON_RESIZE_APP 181136395 Wymusza tryb zgodności z rozmiarem w przypadku zmian konfiguracji.
Format obrazu OVERRIDE_MIN_ASPECT_RATIO 174042980 Zastąpienie bramy, które musi być włączone, aby zastosować inne zastąpienia współczynnika proporcji.
OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY 203647190 Jeśli ta opcja jest włączona (ustawienie domyślne), ogranicza zakres zastępowania do aktywności tylko 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 wyświetlały się na pełnym ekranie, gdy urządzenie jest ustawione pionowo.
Orientacja OVERRIDE_ANY_ORIENTATION 265464455 Umożliwia zastąpienie dowolnej orientacji.
OVERRIDE_ANY_ORIENTATION_TO_USER 310816437 Zastępuje ograniczenia dotyczące orientacji, zmiany rozmiaru i współczynnika proporcji obrazu.
OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT 265452344 Zastępuje orientację pionową, gdy aktywność ma niezdefiniowaną orientację.
OVERRIDE_UNDEFINED_ORIENTATION_NA_NOSENSOR 265451093 Zastępuje orientację na nosensor (używa naturalnej orientacji urządzenia), gdy aktywność ma niezdefiniowaną orientację.
OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE 266124927 Obraca aplikacje w orientacji poziomej o 180 stopni.
OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA 265456536 Ogranicza zakres zastępowania orientacji do sytuacji, gdy aplikacja jest podłączona do kamery.
OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION 255940284 Ustawia naturalną orientację poziomą na wyświetlaczu, gdy zadanie jest wykonywane na pełnym ekranie (także wtedy, gdy są wyświetlane na poziomych pasach).
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION 254631730 Ignoruje żądania orientacji wysyłane z aplikacji, aby uniknąć zapętleń rotacji.
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED 273509367 Ignoruje powtarzające się prośby o orientację podczas ponownego uruchamiania działania. Jeśli Android wykryje, że aplikacja prosi o co najmniej 2 nowe orientacje w ciągu 1 sekundy, system uznaje to za pętlę obrotu nieskończoną i stosuje zastąpienie.
OVERRIDE_RESPECT_REQUESTED_ORIENTATION 236283604 Zapobiega czarnym pasom, wyłączając ustawienie żądania ignorowania orientacji przez producenta urządzenia.
Interfejsy API piaskownicy INTERFEJSY API NEVER_SANDBOX_DISPLAY_API 184838306 Uniemożliwia zmianę działania wyświetlanych interfejsów API.
ALWAYS_SANDBOX_DISPLAY_APIS 185004937 Wymusza interfejsy API Display w aplikacji, aby zwracały granice aplikacji. Interfejsy API Display zwracają logiczne granice obszaru wyświetlania, ale czasami aplikacja zakłada, że interfejsy API Display zwracają granice aplikacji, co prowadzi do problemów z interfejsem.
OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS 237531167 Wymusza zwracanie granic aplikacji przez interfejsy API View używane w aplikacji. Interfejsy API View zwracają logiczne granice obszaru wyświetlania, ale czasami aplikacja zakłada, że interfejsy API View zwracają granice aplikacji, co prowadzi do problemów z interfejsem.
Zgodność z aparatem OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION 263959004 Wyłącza wymuszony obrót. Domyślnie obrót wszystkich aplikacji aparatu o stałej orientacji jest wymuszany po otwarciu podglądu z aparatu.
OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH 264304459 Usuwa domyślne ustawienie twardego odświeżania stosowane w przypadku wymuszania obracania podglądu aparatu.
OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE 264301586 Przełącza twarde odświeżanie na miękkie odświeżanie po wymuszonym obróceniu podglądu kamery, co pomaga zachować stan podczas obrotu siłowego. Domyślnie Android stosuje twarde odświeżanie, gdy podgląd z aparatu jest wymuszony na obróceniu. Twarde odświeżanie może powodować problemy z utratą stanu aplikacji lub ich przyciemnieniem, w zależności od sposobu, w jaki aplikacje były zapisywane w pamięci podręcznej.
OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT 250678880 Przycina bufor obrazu z wewnętrznego przedniego aparatu. Jeśli zastępowanie jest wyłączone, przycięcie wewnętrznego przedniego aparatu zostanie usunięte, a pole widzenia na podglądzie z aparatu zostanie zwiększone. Domyślnie na niektórych urządzeniach składanych (patrz urządzenia referencyjne) system przycina podgląd wszystkich aplikacji aparatu, gdy używany jest wewnętrzny przedni aparat.
Różne OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS 263259275 Zapobiega zamazaniu aplikacji, gdy straci ważność w trybie podzielonego ekranu. Aplikacja czeka na zaznaczenie, zanim rysuje jej zawartość. Może to spowodować zablokowanie lub przyciemnienie jej. Zastąpienie pozwala Androidowi wysłać do aplikacji fałszywe zdarzenie zaznaczenia, które sygnalizuje jej, że ponownie rozpoczyna rysowanie treści.

FORCE_RESIZE_APP

Wymusza zmianę rozmiaru pakietów, w których zastosowano zastąpienie. Nie określać, czy aplikacja może być przełączana w tryb wielu okien, ale zezwala do zmiany rozmiaru bez przechodzenia w tryb zgodności rozmiaru przy zmianie rozmiaru ekranu.

Jak aplikacje mogą osiągnąć taki sam efekt jak zastąpienie

W manifeście aplikacji ustaw android:resizeableActivity do true lub do obsługi zmiany rozmiaru przy wyłączonym trybie wielu okien android:resizeableActivity=false, ustaw android.supports_size_changes flagę metadanych na true.

Optymalizacja aplikacji

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

Jak wyłączyć lub zrezygnować z zastąpienia

Ustaw flagę właściwości PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES na false

Flagi właściwości do dostosowania zastąpienia

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

Polecenia adb do testowania zastąpienia

Aby zastosować zastąpienie i włączyć zmianę 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ą stosowane tylko tymczasowo lub w celu usunięcia zastąpienia.

FORCE_NON_RESIZE_APP

Wymusza, aby pakiety, w których zastosowano zastąpienie, nie miały możliwości zmiany rozmiaru, włącz tryb zgodności rozmiaru w przypadku zmian konfiguracji.

Jak aplikacje mogą osiągnąć taki sam efekt jak zastąpienie

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

Wszystkie aplikacje, które po zmianie rozmiaru działają prawidłowo, powinny mieć Ustawiono wartość android:resizeableActivity lub android.supports_size_changes na true. Inne aplikacje powinny działać poprawnie po zmianie rozmiaru. Zobacz android:resizeableActivity.

Jak wyłączyć lub zrezygnować z zastąpienia

Ustaw flagę właściwości PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES na false

Flagi właściwości do dostosowania zastąpienia

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

Polecenia adb do testowania zastąpienia

Aby zastosować zastąpienie i uniemożliwić zmianę 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ą stosowane tylko tymczasowo lub w celu usunięcia zastąpienia.

OVERRIDE_MIN_ASPECT_RATIO

Odstraszacz wszystkich zastąpień, które wymuszają dany minimalny współczynnik proporcji.

Jak aplikacje mogą osiągnąć taki sam efekt jak zastąpienie

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

Optymalizacja aplikacji

Nie ustawiaj ograniczeń formatu obrazu w swojej aplikacji. Upewnij się, że aplikacja obsługuje różne rozmiary ekranów. Używanie klas rozmiaru okna obsługi różnych układów w zależności od ilości miejsca ekranu. Zobacz interfejs API Compose WindowSizeClass i Wyświetl interfejs API WindowSizeClass.

Jak wyłączyć lub zrezygnować z zastąpienia

Określ ograniczenie formatu obrazu lub ustaw flagę właściwości PROPERTY_COMPAT_ALLOW_MIN_ASPECT_RATIO_OVERRIDE do false.

Flagi właściwości do dostosowania zastąpienia

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

Polecenia adb do testowania 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ą stosowane tylko tymczasowo lub w celu usunięcia zastąpienia.

OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY

Ogranicza ustawienia aplikacji, które wymuszają stosowanie danego minimalnego formatu obrazu podczas aktywności tylko w orientacji pionowej. Ta opcja jest domyślnie włączona i ma zastosowanie tylko jeśli włączona jest też zasada OVERRIDE_MIN_ASPECT_RATIO.

Jak aplikacje mogą osiągnąć taki sam efekt jak zastąpienie

Zobacz OVERRIDE_MIN_ASPECT_RATIO.

Optymalizacja aplikacji

Zobacz OVERRIDE_MIN_ASPECT_RATIO.

Jak wyłączyć lub zrezygnować z zastąpienia

Zobacz OVERRIDE_MIN_ASPECT_RATIO.

Flagi właściwości do dostosowania zastąpienia

Zobacz OVERRIDE_MIN_ASPECT_RATIO.

Polecenia adb do testowania 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ą stosowane tylko tymczasowo lub w celu usunięcia 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 jak zastąpienie

Zobacz OVERRIDE_MIN_ASPECT_RATIO.

Optymalizacja aplikacji

Zobacz OVERRIDE_MIN_ASPECT_RATIO.

Jak wyłączyć lub zrezygnować z zastąpienia

Zobacz OVERRIDE_MIN_ASPECT_RATIO.

Flagi właściwości do dostosowania zastąpienia

Zobacz OVERRIDE_MIN_ASPECT_RATIO.

Polecenia adb do testowania 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ą stosowane tylko tymczasowo lub w celu usunięcia 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 jak zastąpienie

Zobacz OVERRIDE_MIN_ASPECT_RATIO.

Optymalizacja aplikacji

Zobacz OVERRIDE_MIN_ASPECT_RATIO.

Jak wyłączyć lub zrezygnować z zastąpienia

Zobacz OVERRIDE_MIN_ASPECT_RATIO.

Flagi właściwości do dostosowania zastąpienia

Zobacz OVERRIDE_MIN_ASPECT_RATIO.

Polecenia adb do testowania 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ą stosowane tylko tymczasowo lub w celu usunięcia zastąpienia.

OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN

Włącza podzielony ekran. Zezwala aplikacji na używanie wszystkich dostępnego miejsca w trybie podzielonego ekranu, bez czarnych pasów.

Jak aplikacje mogą osiągnąć taki sam efekt jak zastąpienie

Zobacz OVERRIDE_MIN_ASPECT_RATIO.

Optymalizacja aplikacji

Zobacz OVERRIDE_MIN_ASPECT_RATIO.

Jak wyłączyć lub zrezygnować z zastąpienia

Zobacz OVERRIDE_MIN_ASPECT_RATIO.

Flagi właściwości do dostosowania zastąpienia

Zobacz OVERRIDE_MIN_ASPECT_RATIO.

Polecenia adb do testowania 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ą stosowane tylko tymczasowo lub w celu usunięcia zastąpienia.

OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN

Wyłącza zastępowanie minimalnego formatu obrazu na pełnym ekranie w orientacji pionowej, aby używać wszystkich dostępnego miejsca na ekranie.

Jak aplikacje mogą osiągnąć taki sam efekt jak zastąpienie

Zobacz OVERRIDE_MIN_ASPECT_RATIO.

Optymalizacja aplikacji

Zobacz OVERRIDE_MIN_ASPECT_RATIO.

Jak wyłączyć lub zrezygnować z zastąpienia

Zobacz OVERRIDE_MIN_ASPECT_RATIO.

Flagi właściwości do dostosowania zastąpienia

Zobacz OVERRIDE_MIN_ASPECT_RATIO.

Polecenia adb do testowania 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ą stosowane tylko tymczasowo lub w celu usunięcia zastąpienia.

OVERRIDE_ANY_ORIENTATION

Włącza te zastąpienia umożliwiające zastąpienie dowolnej orientacji:

Jak aplikacje mogą osiągnąć taki sam efekt jak zastąpienie

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

Optymalizacja aplikacji

Aplikacja powinna obsługiwać wszystkie orientacje. Zmiana orientacji jest konfiguracji, którą można wprowadzić na 2 sposoby: pozwalając zniszczenie i ponowne utworzenie aplikacji przez system lub zarządzanie zmianami konfiguracji siebie. Jeśli samodzielnie zarządzasz zmianami konfiguracji, stan aplikacji może być przechowywane przez ViewModel. W bardzo nielicznych przypadkach możesz zablokować tylko na małych ekranach, ale może to nie co pozwala użytkownikowi odpowiednio obracać aplikację. Na urządzeniach z Androidem 12L i nowszym Stałą orientację można zastąpić przez konfigurację urządzenia. Więcej informacje na temat obsługi zmian konfiguracji i obsługi wszystkich orientacje znajdziesz w artykule na temat obsługi zmian konfiguracji. Przegląd modelu ViewModel i Ograniczona orientacja aplikacji z telefonami, ale nie na urządzeniach z dużym ekranem.

Jak wyłączyć lub zrezygnować z zastąpienia

Ustawianie flagi właściwości PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE do false.

Flagi właściwości do dostosowania zastąpienia

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

Polecenia adb do testowania 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ą stosowane tylko tymczasowo lub w celu usunięcia zastąpienia.

OVERRIDE_ANY_ORIENTATION_TO_USER

Umożliwia aplikacji wypełnienie dostępnego miejsca. Zastępuje dowolną orientację, możliwość zmiany rozmiaru oraz ograniczenia dotyczące formatu obrazu określone w manifeście aplikacji. Poza tym ignoruje wszystkie wywołania Activity#setRequestedOrientation()

Jak aplikacje mogą osiągnąć taki sam efekt jak zastąpienie

  • Nie ustawiaj pliku manifestu android:screenOrientation lub ustaw atrybut na "user".

  • Ustaw plik manifestu android:resizeableActivity do wartości true.

  • Na małych ekranach – w celu obsługi zmiany rozmiaru aplikacji przy wyłączonym trybie wielu okien za pomocą android:resizeableActivity=false, ustaw android.supports_size_changes – flaga metadanych true. Nie ustawiaj minAspectRatio i maxAspectRatio.

Optymalizacja aplikacji

włączyć w aplikacji obsługę wszystkich orientacji; nie ustawiaj: screenOrientation w pliku manifestu aplikacji. Obsługa zmian rozmiaru aplikacji, trybu wielu okien i wszystkich formatów obrazu, ustawiając Atrybut android:resizeableActivity w pliku manifestu aplikacji dla: true. Zobacz Obsługa różnych rozmiarów ekranów.

Jak wyłączyć lub zrezygnować z zastąpienia

Zobacz OVERRIDE_ANY_ORIENTATION.

Flagi właściwości do dostosowania zastąpienia

Zobacz OVERRIDE_ANY_ORIENTATION.

Polecenia adb do testowania zastąpienia

Aby zastosować zastąpienie:

adb shell am compat enable OVERRIDE_ANY_ORIENTATION_TO_USER <package>

Aby usunąć zastąpienie:

adb shell am compat disable OVERRIDE_ANY_ORIENTATION_TO_USER <package>

Uwaga: te polecenia są stosowane tylko tymczasowo lub w celu usunięcia zastąpienia.

OVERRIDE_UNDEFINED_ORIENTATION_DO_PORTRAIT

Umożliwia orientację pionową podczas wszystkich aktywności w pakiecie. O ile włączona jest opcja OVERRIDE_ANY_ORIENTATION, zastąpienie jest używana tylko wtedy, gdy aktywność nie określa żadnej innej stałej orientacji.

Jak aplikacje mogą osiągnąć taki sam efekt jak zastąpienie

Zobacz OVERRIDE_ANY_ORIENTATION.

Optymalizacja aplikacji

Zobacz OVERRIDE_ANY_ORIENTATION.

Jak wyłączyć lub zrezygnować z zastąpienia

Zobacz OVERRIDE_ANY_ORIENTATION.

Flagi właściwości do dostosowania zastąpienia

Zobacz OVERRIDE_ANY_ORIENTATION.

Polecenia adb do testowania 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ą stosowane tylko tymczasowo lub w celu usunięcia zastąpienia.

OVERRIDE_UNDEFINED_ORIENTATION_NA_NOSENSOR

Włącza orientację nosensora dla wszystkich działań w pakietu SDK. Chyba że parametr OVERRIDE_ANY_ORIENTATION jest włączona, zastąpienie jest używane tylko wtedy, gdy nie została określona żadna inna stała orientacja określonych przez aktywność.

Jak aplikacje mogą osiągnąć taki sam efekt jak zastąpienie

Zobacz OVERRIDE_ANY_ORIENTATION.

Optymalizacja aplikacji

Zobacz OVERRIDE_ANY_ORIENTATION.

Jak wyłączyć lub zrezygnować z zastąpienia

Zobacz OVERRIDE_ANY_ORIENTATION.

Flagi właściwości do dostosowania zastąpienia

Zobacz OVERRIDE_ANY_ORIENTATION.

Polecenia adb do testowania 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ą stosowane tylko tymczasowo lub w celu usunięcia zastąpienia.

OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE

Włącza orientację reverseLevel dla wszystkich działań w z konkretną przesyłką. Chyba że parametr OVERRIDE_ANY_ORIENTATION jest włączona, zastąpienie jest używane tylko wtedy, gdy nie została określona żadna inna stała orientacja określonych przez aktywność.

Jak aplikacje mogą osiągnąć taki sam efekt jak zastąpienie

Zobacz OVERRIDE_ANY_ORIENTATION.

Optymalizacja aplikacji

Zobacz OVERRIDE_ANY_ORIENTATION.

Jak wyłączyć lub zrezygnować z zastąpienia

Zobacz OVERRIDE_ANY_ORIENTATION.

Flagi właściwości do dostosowania zastąpienia

Zobacz OVERRIDE_ANY_ORIENTATION.

Polecenia adb do testowania 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ą stosowane tylko tymczasowo lub w celu usunięcia zastąpienia.

OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA

Limity OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT, OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR, oraz OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE zastąpienia, tak aby były stosowane tylko wtedy, gdy połączenie z kamerą jest aktywne.

Jak aplikacje mogą osiągnąć taki sam efekt jak zastąpienie

Zobacz OVERRIDE_ANY_ORIENTATION.

Optymalizacja aplikacji

Zobacz OVERRIDE_ANY_ORIENTATION.

Jak wyłączyć lub zrezygnować z zastąpienia

Zobacz OVERRIDE_ANY_ORIENTATION.

Flagi właściwości do dostosowania zastąpienia

Zobacz OVERRIDE_ANY_ORIENTATION.

Polecenia adb do testowania 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ą stosowane tylko tymczasowo lub w celu usunięcia zastąpienia.

OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION

Ogranicza orientację wyświetlania do naturalnej orientacji poziomej, gdy są spełnione następujące warunki:

  • Aktywność jest wyświetlana na pełnym ekranie
  • Właściwość komponentu Zrezygnuj Usługa PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE jest wyłączona
  • Ustawienie żądania ignorowania orientacji przez producenta urządzenia jest włączone dla wyświetlacz
  • Naturalna orientacja wyświetlacza to pozioma.

Jak aplikacje mogą osiągnąć taki sam efekt jak zastąpienie

Nie dotyczy. Problem powinien zostać rozwiązany w logice aplikacji.

Optymalizacja aplikacji

Zobacz OVERRIDE_ANY_ORIENTATION.

Jak wyłączyć lub zrezygnować z zastąpienia

Ustawianie flagi właściwości PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE do false.

Flagi właściwości do dostosowania zastąpienia

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

Polecenia adb do testowania 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ą stosowane tylko tymczasowo lub w celu usunięcia zastąpienia.

OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION

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

Jak aplikacje mogą osiągnąć taki sam efekt jak zastąpienie

Ustawienie flagi właściwości PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION do true.

Optymalizacja aplikacji

Zobacz OVERRIDE_ANY_ORIENTATION.

Jak wyłączyć lub zrezygnować z zastąpienia

Ustawienie flagi właściwości PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION do false.

Flagi właściwości do dostosowania zastąpienia

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

Polecenia adb do testowania 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ą stosowane tylko tymczasowo lub w celu usunięcia zastąpienia.

OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED (PRZEDSTAWIENIE)

Włącza zasadę zgodności, która ignoruje żądaną orientację w aplikacji odpowiedź na wywołanie aplikacji Activity#setRequestedOrientation() więcej niż 2 razy co 1 sekundę, o ile działanie nie ma czarnych pasów w przypadku stałej orientacji.

Jak aplikacje mogą osiągnąć taki sam efekt jak zastąpienie

Nie dotyczy. Problem powinien zostać rozwiązany w logice aplikacji.

Optymalizacja aplikacji

Zobacz OVERRIDE_ANY_ORIENTATION.

Jak wyłączyć lub zrezygnować z zastąpienia

Ustawienie flagi właściwości PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED do false

Flagi właściwości do dostosowania zastąpienia

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

Polecenia adb do testowania 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ą stosowane tylko tymczasowo lub w celu usunięcia zastąpienia.

OVERRIDE_RESPECT_REQUESTED_ORIENTATION

Wyklucza pakiety z działania ignorowania żądań orientacji, które można włączyć przez producentów urządzeń dla obszaru wyświetlania lub całego wyświetlacza.

Jak aplikacje mogą osiągnąć taki sam efekt jak zastąpienie

Nie dotyczy. Problem powinien zostać rozwiązany w logice aplikacji.

Optymalizacja aplikacji

Zobacz OVERRIDE_ANY_ORIENTATION.

Jak wyłączyć lub zrezygnować z zastąpienia

Nie można z tego zrezygnować. Wyłączenie zastępowania może być niebezpieczne, jeśli aplikacja jest niezgodna za pomocą urządzenia, które producenta urządzenia zignoruje prośbę o orientację Włączono. Skontaktuj się z deweloperem aplikacji na Androida Relacje, aby wyłączyć zastąpienie.

Flagi właściwości do dostosowania zastąpienia

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

Polecenia adb do testowania 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ą stosowane tylko tymczasowo lub w celu usunięcia zastąpienia.

INTERFEJSY API NEVER_SANDBOX_DISPLAY_API

Wymusza, aby pakiety nigdy nie korzystały z piaskownicy Display w przypadku działań w trybie zgodności z czarnymi pasami lub rozmiarem. Interfejsy API usługi Display nadal podaj granice obszaru wyświetlania.

Jak aplikacje mogą osiągnąć taki sam efekt jak zastąpienie

Zadeklaruj działania z możliwością zmiany rozmiaru, ustawiając android:resizeableActivity – atrybut pliku manifestu do: true lub flagę metadanych android.supports_size_changes do true.

Optymalizacja aplikacji

Aplikacje, które zadeklarują, że można w pełni zmienić rozmiar, nie powinny nigdy polegać na rozmiarze wyświetlacza do określania pozycji elementów interfejsu. Przenieś aplikację do najnowszych interfejsów API, które podaj WindowMetrics. Jeśli korzystasz z Jetpack Compose, skorzystaj z WindowSizeClass API do rysowania interfejsu w zależności od ilości ekranu. obszaru aplikacji na bieżącym wyświetlaczu. Zobacz Klasy rozmiaru okna.

Jak wyłączyć lub zrezygnować z zastąpienia

Nie można z tego zrezygnować. Migracja z wycofanych interfejsów API.

Flagi właściwości do dostosowania zastąpienia

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

Polecenia adb do testowania 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ą stosowane tylko tymczasowo lub w celu usunięcia zastąpienia.

ALWAYS_SANDBOX_DISPLAY_APIS

Wymusza, aby pakiety zawsze miały stosowany tryb piaskownicy interfejsu Display API bez względu na tryb okna. Interfejsy API Display zawsze określają granice aplikacji.

Jak aplikacje mogą osiągnąć taki sam efekt jak zastąpienie

Zadeklaruj działania, których nie można zmienić, za pomocą jednego z tych ustawień android:resizeableActivity do false lub android.supports_size_changes – flaga metadanych false.

Optymalizacja aplikacji

Aplikacje, które zadeklarują, że można w pełni zmienić rozmiar, nie powinny używać rozmiaru wyświetlacza, pozycjonować elementy interfejsu. Przenieś aplikację z wycofanych interfejsów API do z najnowszymi interfejsami API, które zapewniają WindowMetrics. Zobacz WindowMetricsCalculator

Jak wyłączyć lub zrezygnować z zastąpienia

Nie można z tego zrezygnować. Migracja z wycofanych interfejsów API.

Flagi właściwości do dostosowania zastąpienia

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

Polecenia adb do testowania 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ą stosowane tylko tymczasowo lub w celu usunięcia zastąpienia.

OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS

Wymusza, aby pakiety te interfejsy API View znajdowały się w piaskownicy względem granic aktywności:

Jak aplikacje mogą osiągnąć taki sam efekt jak zastąpienie

Rozwiąż problem w kodzie aplikacji za pomocą interfejsów API, które podają granice okna aplikacji i odsunięć względem okna aplikacji, a nie granic sposób wyświetlania i przesunięcia względem wyświetlacza urządzenia.

Optymalizacja aplikacji

Aplikacje powinny korzystać z interfejsów API View, biorąc pod uwagę możliwość wyświetlania czarnych pasów na ekranie. oraz tryb wielu okien. Zobacz WindowMetricsCalculator

Jak wyłączyć lub zrezygnować z zastąpienia

Ustawienie flagi właściwości PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS do false.

Flagi właściwości do dostosowania zastąpienia

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

Polecenia adb do testowania 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ą stosowane tylko tymczasowo lub w celu usunięcia zastąpienia.

OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION

Wyłącza wymuszoną rotację. Poprawia komfort korzystania z niektórych aplikacji.

Jak aplikacje mogą osiągnąć taki sam efekt jak zastąpienie

Ustawienie flagi właściwości PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION do false.

Optymalizacja aplikacji

Nie korzystaj z orientacji czujnika aparatu w pamięci podręcznej ani informacji o urządzeniu. Dla: wskazówki dotyczące zgodności z aparatem, patrz Przedstawiamy wizjer aparatu i pomoc powierzchnie w aparacie z możliwością zmiany rozmiaru

Jak wyłączyć lub zrezygnować z zastąpienia

Ustawienie flagi właściwości PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION do true.

Flagi właściwości do dostosowania zastąpienia

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

Polecenia adb do testowania zastąpienia

Aby zastosować zastąpienie, które usuwa wymuszoną rotację:

adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>

Aby usunąć zastąpienie, które umożliwia wymuszenie rotacji:

adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>

Uwaga: te polecenia są stosowane tylko tymczasowo lub w celu usunięcia zastąpienia.

OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH

Wyłącza odświeżanie aktywności po wymuszeniu rotacji. Większa wygoda użytkowników gdy odświeżenie powoduje utratę stanu w aplikacjach.

Jak aplikacje mogą osiągnąć taki sam efekt jak zastąpienie

Ustawienie flagi właściwości PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH do false.

Optymalizacja aplikacji

Zobacz OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION.

Jak wyłączyć lub zrezygnować z zastąpienia

Ustawienie flagi właściwości PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH do true.

Flagi właściwości do dostosowania zastąpienia

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

Polecenia adb do testowania zastąpienia

Aby zastosować zastąpienie, skutkujące usunięciem odświeżenia aktywności:

adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>

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

adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>

Uwaga: te polecenia są stosowane tylko tymczasowo lub w celu usunięcia zastąpienia.

OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE

Sprawia, że pakiety, do których jest stosowana dana aktywność, są odświeżane za pomocą onResume()onPause() → cykl onResume(), a nie onResume()onStop()onResume() po wymuszeniu obrotu zgodnego z aparatem.

Jak aplikacje mogą osiągnąć taki sam efekt jak zastąpienie

Ustawienie flagi właściwości PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE do true.

Optymalizacja aplikacji

Zobacz OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION.

Jak wyłączyć lub zrezygnować z zastąpienia

Ustawienie flagi właściwości PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE do false.

Flagi właściwości do dostosowania zastąpienia

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

Polecenia adb do testowania 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ą stosowane tylko tymczasowo lub w celu usunięcia zastąpienia.

OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT

Wymusza przycięcie danych wyjściowych z aparatu do przeciwnej orientacji w przypadku orientacji pionowej orientacja aparatu nie jest zgodna z naturalną orientacją urządzenia. Wiele aplikacji nie radzą sobie z tą sytuacją i w przeciwnym razie wyświetl rozciągnięte obrazy.

Jak aplikacje mogą osiągnąć taki sam efekt jak zastąpienie

Ustawienie flagi właściwości PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT do true.

Optymalizacja aplikacji

Zobacz OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION.

Jak wyłączyć lub zrezygnować z zastąpienia

Ustawienie flagi właściwości PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT do false.

Flagi właściwości do dostosowania zastąpienia

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

Polecenia adb do testowania zastąpienia

Aby zastosować zastąpienie, które obejmuje przycięcie wewnętrznego przedniego aparatu:

adb shell am compat enable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>

Aby usunąć zastąpienie, które spowoduje usunięcie przycięcia wewnętrznego przedniego aparatu:

adb shell am compat disable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>

Uwaga: te polecenia są stosowane tylko tymczasowo lub w celu usunięcia zastąpienia.

OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION

Uniemożliwia aplikacjom rezygnację z udostępniania ekranu aplikacji (zobacz Wyświetlanie multimediów). Stosowane, gdy aplikacje nadużywają Interfejs API createConfigForDefaultDisplay() do wymuszenia wyświetlanie na pełnym ekranie i narażanie prywatności użytkownika przez ujawnianie treści powiadomień, które są zapisywane na pełnym ekranie, ale nie na ekranie aplikacji. udostępniania i wszystkich aplikacji niezależnie od trybu okna.

Jak aplikacje mogą osiągnąć taki sam efekt jak zastąpienie

Zezwalaj na domyślne zachowanie wyświetlania multimediów (zaimplementowane w Androidzie 14 i interfejsie API poziom 34, z: createScreenCaptureIntent()), która pozwala użytkownikom zdecydować, czy chcą udostępnić cały ekran, czy tylko pojedynczą aplikację. niezależnie od trybu okna. Lub zadzwoń createScreenCaptureIntent(MediaProjectionConfig) z argumentem MediaProjectionConfig zwróconym z Zadzwoń pod numer createConfigForUserChoice().

Optymalizacja aplikacji

Zezwalaj użytkownikom na wybór, czy udostępnić cały wyświetlacz urządzenia czy aplikację podczas wyświetlania multimediów, co od Androida 14 jest zachowaniem domyślnym.

Zmień rozmiar aplikacji (resizeableActivity="true"), aby: obsługują tryb wielu okien.

Jak wyłączyć lub zrezygnować z zastąpienia

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

Flagi właściwości do dostosowania zastąpienia

Brak.

Polecenia adb do testowania zastąpienia

Aby zastosować zastąpienie, czyli anulowanie rezygnacji aplikacji z udostępniania części ekranu (włącza udostępnianie części ekranu):

adb shell am compat enable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>

Aby usunąć zastąpienie, które umożliwia aplikacji rezygnację z części ekranu udostępnianie:

adb shell am compat disable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>

Uwaga: te polecenia są stosowane tylko tymczasowo lub w celu usunięcia zastąpienia.

OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS

Włącza wysyłanie fałszywych informacji w przypadku niezaznaczonych aplikacji w trybie podzielonego ekranu. Niektóre silniki gier czekają na skupienie się przed rysowaniem zawartości aplikacji; i tak fałszywa ostrość pomaga aplikacjom uniknąć zamazania po wznowieniu działania aplikacji. i jednocześnie skupić się na ekranie.

Jak aplikacje mogą osiągnąć taki sam efekt jak zastąpienie

Ustawienie flagi właściwości PROPERTY_COMPAT_ENABLE_FAKE_FOCUS do true

Optymalizacja aplikacji

Tego problemu można uniknąć, jeśli aplikacja obsługuje wiele orientacji, wszystko zmienić się na lepsze. Przygotuj aplikację na duży ekran, wykonując te czynności: Wytyczne dotyczące jakości aplikacji na duży ekran

Jeśli używasz silnika gry Unity, uaktualnij go do wersji 2019.4.40 lub nowszej, ponownie wyeksportować grę. Zachowaj opcję Resizable Window zameldował(a) się w Android Player ustawieniach.

Jak wyłączyć lub zrezygnować z zastąpienia

Ustawienie flagi właściwości PROPERTY_COMPAT_ENABLE_FAKE_FOCUS do false

Flagi właściwości do dostosowania zastąpienia

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

Polecenia adb do testowania 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ą stosowane tylko tymczasowo lub w celu usunięcia zastąpienia.

Dodatkowe materiały