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ść zwrotuSurface.ROTATION_0
Jeśli aplikacje zakładają, żeROTATION_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.
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ą funkcjiActivity#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ą nafalse
mogą ustawmaxAspectRatio
.minAspectRatio
: określa minimalny format obrazu. obsługiwanych przez aplikację. Tylko aplikacje z wartościąresizeableActivity
ustawioną nafalse
mogą ustawminAspectRatio
.
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.
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:
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:
- Można zmienić jej rozmiar za pomocą:
resizeableActivity="true"
- Obsługuje tryb obraz w obrazie (PIP).
- jest osadzony;
- Ma zastąpienie ustawienia
FORCE_RESIZE_APP
dla poszczególnych aplikacji stosowane przez producenta urządzenia (właściwości ustawione przez aplikację są ignorowane)
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łaniaonCreate()
, 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:
aktywność została już ponownie uruchomiona z poprzedniego wywołania metody lub włączono eksperymentalną siłę obrotu kamery (patrz Aparat podgląd poniżej).
Producenci urządzeń mogą zastosować to zachowanie do aplikacji z
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION
Działanie wysłało więcej niż 2 żądania orientacji w ciągu jednej sekundy, co oznacza wskazuje, że wystąpiła pętla. Z tych 2 żądań Android używa które maksymalizuje obszar wyświetlania aplikacji.
Producenci urządzeń mogą zastosować to zachowanie do aplikacji z
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED
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()
ionStart()
(domyślnie) lubonPause()
ionResume()
(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:
Platforma:
Plecak odrzutowy:
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:
- Strumieniowe przesyłanie danych z urządzenia: aby przetestować aplikację na urządzeniach produkcyjnych (w tym urządzeniach referencyjnych) hostowanych w centrach danych Google, zobacz Strumieniowe przesyłanie danych z urządzenia z Androidem w oparciu o technologię Firebase
- Emulatory w Android Studio Hedgehog: informacje o tworzeniu emulatorów urządzeń referencyjnych, zobacz Tworzenie urządzeń wirtualnych i zarządzanie nimi
- Emulator z możliwością zmiany rozmiaru w Android Studio: informacje o uzyskiwaniu dostępu do wirtualnych urządzeń zapoznaj się z artykułem Uruchamianie aplikacji przy użyciu emulatora Androida.
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:
- OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
- OVERRIDE_UNDEFINED_ORIENTATION_NA_NOSENSOR
- OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE
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ścitrue
.Na małych ekranach – w celu obsługi zmiany rozmiaru aplikacji przy wyłączonym trybie wielu okien za pomocą
android:resizeableActivity=false
, ustawandroid.supports_size_changes
– flaga metadanychtrue
. Nie ustawiajminAspectRatio
imaxAspectRatio
.
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
- Wytyczne dotyczące jakości aplikacji na duży ekran
- Wytyczne dotyczące podstawowej jakości aplikacji