Orientacja aplikacji, format obrazu i możliwość zmiany rozmiaru

Aplikacje na Androida działają na urządzeniach różnego rodzaju: telefonach, tabletach, urządzeniach składanych, urządzeniach z ChromeOS, samochodach, telewizorach, a nawet urządzeniach XR. Aby dostosować się do tego zróżnicowanego środowiska, aplikacja powinna obsługiwać wszystkie formaty urządzeń i rozmiary wyświetlaczy.

Android 16 (poziom API 36) umożliwia aplikacjom dostosowywanie się do różnych urządzeń i rozmiarów wyświetlaczy przez zastępowanie ograniczeń aplikacji dotyczących orientacji ekranu, formatu obrazu i możliwości zmiany rozmiaru. Zastąpienia dotyczą urządzeń o najmniejszej szerokości ≥ 600 dp, co oznacza:

  • Tablety
  • Ekrany wewnętrzne składanych urządzeń z dużym ekranem
  • Tryb okien na pulpicie (na wszystkich urządzeniach)

Aplikacje kierowane na interfejs API na poziomie 36 można zmieniać i mogą one wchodzić w tryb wielu okien (odpowiednik resizeableActivity="true"), jeśli najmniejsza szerokość wyświetlacza wynosi co najmniej 600 dp.

Aplikacja jest wyświetlana w formacie letterbox na rozłożonym urządzeniu z dużym ekranem przed Androidem 16, ale jest wyświetlana na pełnym ekranie, gdy jest kierowana na Androida 16. Aplikacja wyświetla więcej wiadomości w trybie pełnoekranowym niż w trybie z paskami.
Rysunek 1. Kanał Wiadomości dla deweloperów, który wcześniej był wyświetlany w formacie letterbox na urządzeniach z dużym ekranem (po lewej), jest wyświetlany na pełnym ekranie, gdy jest kierowany na Androida 16 (po prawej).

Android 16 wymusza spójny model adaptacyjnego projektowania aplikacji, który optymalizuje wrażenia użytkownika, uwzględniając jego preferencje dotyczące orientacji urządzenia, proporcji i rozmiaru wyświetlacza.

Zmiany

W przypadku aplikacji kierowanych na Androida 16 (poziom API 36) na dużych ekranach ignorowane są te atrybuty manifestu i interfejsy API:

Atrybut lub interfejs API Ignorowane wartości
screenOrientation portrait, landscape, reversePortrait, reverseLandscape, sensorPortrait, sensorLandscape, userPortrait, userLandscape
resizeableActivity wszystkie
minAspectRatio wszystkie
maxAspectRatio wszystkie
setRequestedOrientation()

getRequestedOrientation()
portrait, landscape, reversePortrait, reverseLandscape, sensorPortrait, sensorLandscape, userPortrait, userLandscape

Wyjątki

Wyjątki od zmian w Androidzie 16 obejmują:

  • Wyświetlacze mniejsze niż sw600dp (większość telefonów, składane telefony z klapką i zewnętrzne wyświetlacze składanych telefonów z dużym ekranem)

  • Gry oparte na fladze android:appCategory

    Opublikuj grę za pomocą pakietów Android App Bundle i podpisywania aplikacji przez Google Play, aby Google Play mogło zarządzać flagą i automatycznie zapewniać korzyści wynikające z pakietów aplikacji. Zobacz też Omówienie manifestu aplikacji.

  • Użytkownik wyraża zgodę na domyślne działanie aplikacji w ustawieniach proporcji obrazu

Zrezygnuj

Aby zrezygnować z zachowania na poziomie API 36, zadeklaruj właściwość pliku manifestu PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY.

Aby zrezygnować z określonej aktywności, ustaw odpowiednią właściwość w elemencie <activity>:

<activity ...>
    <property
        android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY"
        android:value="true" />
    ...
</activity>

Aby zrezygnować z usług w całej aplikacji, ustaw odpowiednią usługę w elemencie <application>:

<application ...>
    <property
        android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY"
        android:value="true" />
    ...
</application>

Testy

Aby sprawdzić, czy zmiany w Androidzie 16 mają wpływ na Twoją aplikację, użyj emulatorów z serii Pixel Tablet i Pixel Fold w Android Studio i ustaw wartość targetSdkPreview = "Baklava" w pliku modułu build.gradle aplikacji.

Możesz też użyć platformy zgodności aplikacji na urządzeniach testowych, włączając flagę UNIVERSAL_RESIZABLE_BY_DEFAULT (patrz Narzędzia platformy zgodności).

Testowanie możesz zautomatyzować za pomocą platformy testowej Espressointerfejsów Jetpack Compose API do testowania.

Przewodnik po implementacji

Aplikacje, które ograniczają orientację urządzenia, format obrazu lub możliwość zmiany rozmiaru aplikacji, mogą mieć problemy z wyświetlaniem na Androidzie 16, np. nakładające się układy. Aby zapewnić optymalne wrażenia użytkownikom telefonów, urządzeń składanych, tabletów, urządzeń z ChromeOS i innych urządzeń, twórz aplikacje, które reagują na zmiany i dostosowują się do nich.

Lista kontrolna gotowości

Skorzystaj z tej listy kontrolnej, aby upewnić się, że Twoja aplikacja jest gotowa na zmiany w Androidzie 16:

  • Unikaj rozciągniętych komponentów interfejsu: układy zaprojektowane z myślą o standardowych ekranach telefonów w orientacji pionowej mogą nie pasować do innych formatów obrazu. Na przykład elementy interfejsu, które wypełniają całą szerokość wyświetlacza, mogą być rozciągnięte w orientacji poziomej. Dodaj maksymalną szerokość komponentów, aby uniknąć rozciągania.
  • Włącz przewijanie układów: jeśli układy nie są przewijane, użytkownicy mogą nie mieć dostępu do przycisków ani innych elementów interfejsu, które są poza ekranem w orientacji poziomej. Włącz przewijanie układów aplikacji, aby sprawdzić, czy wszystkie treści są dostępne niezależnie od wysokości wyświetlacza.
  • Sprawdź zgodność kamery w trybie pionowym i poziomym: podglądy w wizjerze kamery, które zakładają określony format obrazu i orientację względem czujnika kamery, mogą powodować rozciągnięte lub odwrócone podglądy na niezgodnych wyświetlaczach. Sprawdź, czy wizjery obracają się prawidłowo wraz ze zmianą orientacji. Umożliwia dostosowanie wizjerów do formatów interfejsu, które różnią się od formatu czujnika.
  • Zachowywanie stanu podczas zmiany rozmiaru okna: usunięcie ograniczeń dotyczących orientacji i proporcji może powodować częste zmiany rozmiaru okna aplikacji w zależności od tego, jak użytkownicy wolą korzystać z aplikacji, np. przez obracanie, składanie lub rozkładanie urządzenia albo zmianę rozmiaru aplikacji w trybie wielu okien lub okien na komputerze. Zmiany konfiguracji, takie jak zmiana orientacji czy rozmiaru okna, powodują ponowne utworzenie aktywności (domyślnie). Aby zapewnić optymalną wygodę użytkowników, zachowaj stan aplikacji, aby zachowywała ona dane (np. wpisane w formularzu) i użytkownicy mogli zachować kontekst.
  • Używaj klas rozmiarów okien: obsługuj różne rozmiary okien i proporcje bez dostosowywania do konkretnych urządzeń. Załóż, że rozmiary okien będą się często zmieniać. Użyj klas rozmiaru okna, aby określić wymiary okna, a następnie zastosuj odpowiedni układ adaptacyjny.
  • Twórz elastyczne układy: w ramach klas rozmiarów okien elastyczne układy dostosowują się do zmian wymiarów wyświetlacza, aby zawsze tworzyć optymalną prezentację aplikacji.

Praktyczny przewodnik po tworzeniu adaptacyjnych układów w Compose znajdziesz w samouczku Tworzenie adaptacyjnych aplikacji za pomocą Jetpack Compose. Jeśli migrujesz aplikację, która korzysta z widoków, zapoznaj się z artykułem Opracowywanie strategii wdrażania.

Oś czasu

  • Android 16 (2025): obsługa wszystkich orientacji i formatów obrazu oraz możliwości zmiany rozmiaru aplikacji to podstawowe funkcje na urządzeniach z dużym ekranem (najmniejsza szerokość ekranu >= 600 dp) w przypadku aplikacji korzystających z interfejsu API na poziomie 36. Deweloperzy mogą jednak zrezygnować z udziału w tym programie.
Docelowy poziom interfejsu API Urządzenia, których dotyczy problem Zezwolenie na rezygnację programisty
36 (Android 16) Urządzenia z dużym ekranem (najmniejsza szerokość ekranu ≥ 600 dp) Tak

Terminy kierowania na określone poziomy interfejsu API zależą od sklepu z aplikacjami. Od sierpnia 2026 r. Google Play będzie wymagać, aby aplikacje były kierowane na interfejs API na poziomie 36.

Dodatkowe materiały