Aplikacje adaptacyjne obsługują wyświetlacze o różnych rozmiarach: cały ekran urządzenia, okna o zmiennych rozmiarach w trybie wielozadaniowym, orientację pionową i poziomą oraz wyświetlacze złożone i rozłożone urządzeń składanych.
Krótka lista ustawień konfiguracji i interfejsów API, które umożliwiają tworzenie aplikacji dostosowanych. Niektóre przestarzałe ustawienia i interfejsy API są jednak niezgodne z aplikacją adaptacyjną i należy ich unikać.
Możliwość zmiany rozmiaru
Aplikacje adaptacyjne obsługują możliwość zmiany rozmiaru aplikacji i tryb wielu okien.
Atrybut resizeableActivity
elementów pliku manifestu <activity>
i <application>
włącza lub wyłącza tryb wielookienkowy w Androidzie 11 (poziom interfejsu API 30) i starszych. W Androidzie 12 (poziom interfejsu API 31) i nowszych na dużych ekranach tryb wielookien jest obsługiwany niezależnie od tego atrybutu. Więcej informacji znajdziesz w artykule Obsługa trybu wielookiennego.
Umożliw aplikacji korzystanie z wielu okien i wielozadaniowość, aby zwiększyć produktywność i zadowolenie użytkowników.
Ustaw resizeableActivity="true"
, jeśli aplikacja jest kierowana na poziomy interfejsu API niższe niż 24. W przeciwnym razie możesz o tym zapomnieć – domyślnie na Androidzie 7.0 (poziom interfejsu API 24) i nowszych jest ustawiona wartość true
.
Nie ustawiaj wartości resizeableActivity="false"
na żadnym poziomie interfejsu API. Nie wykluczaj aplikacji z przypadków użycia, które obejmują tryb wielu okien.
Orientacja
Aplikacje adaptacyjne obsługują orientację pionową i poziomą niezależnie od rozmiaru wyświetlacza lub trybu okna.
Ustawienie pliku manifestu screenOrientation
ogranicza orientację aktywności.
Usuń ustawienie screenOrientation
z pliku manifestu aplikacji.
Zablokowanie orientacji aplikacji nie zapobiega zmianom rozmiaru okna. Aplikacje są zmieniane, gdy przechodzą w tryb wielookienkowy, gdy urządzenie jest składane lub rozkładane lub gdy zmienia się rozmiar okna typu pulpit. Aplikacja musi obsługiwać zmiany rozmiaru okna niezależnie od ustawienia atrybutu screenOrientation
.
Nie ograniczaj orientacji aktywności. Aplikacje, które blokują orientację, są wyświetlane w ramce na urządzeniach z dużym ekranem i w niezgodnych rozmiarach okna.
Aplikacje w formacie letterbox są trudniejsze do znalezienia w Google Play na tabletach, składanych urządzeniach i urządzeniach z ChromeOS.
Format obrazu
Rozmiary ekranów i okien są różne, podobnie jak ich formaty obrazu – od wysokich i wąskich po kwadratowe i szerokie.
Ustawienia manifestu minAspectRatio
i maxAspectRatio
ograniczają proporcje obrazu aplikacji do wartości zakodowanych na stałe.
Dostosuj aplikację do ekranu niezależnie od względnych wymiarów.
Usuń ustawienia minAspectRatio
i maxAspectRatio
z pliku manifestu aplikacji. Możesz też zadbać o to, aby aplikację można było skalować, a stosowny format obrazu zostanie zastosowany automatycznie (patrz sekcja Możliwość zmiany rozmiaru).
Nie próbuj kontrolować względnych wymiarów aplikacji. Jeśli aplikacja działa na ekranie lub w oknie o formacie obrazu niezgodnym z formatem obrazu aplikacji, jest wyświetlana w letterboxie.
W Androidzie 14 (poziom interfejsu API 34) i nowszych użytkownicy mogą zastąpić współczynnik proporcji aplikacji, aby rozszerzyć aplikacje w formacie letterbox i wypełnić dostępną powierzchnię wyświetlacza. Zobacz Tryb zgodności urządzeń.
Rozmiar okna
Optymalizacja układów pod kątem różnych rozmiarów ekranu jest podstawową zasadą projektowania adaptacyjnego. Aplikacje adaptacyjne skupiają się na rozmiarze okna aplikacji, a nie na rozmiarze ekranu urządzenia. Gdy aplikacja jest w trybie pełnoekranowym, okno aplikacji jest ekranem urządzenia.
Klasy rozmiarów okna zapewniają systematyczny sposób określania i kategorizowania rozmiaru okna aplikacji. Dostosuj aplikację, zmieniając układy w zależności od klasy rozmiaru okna.
Oceniaj rozmiar okna aplikacji na podstawie klas rozmiarów okien.
Aby określić klasę rozmiaru okna, użyj funkcji najwyższego poziomu currentWindowAdaptiveInfo()
biblioteki Compose Material 3 Adaptive. Więcej informacji znajdziesz w artykule Tworzenie aplikacji dostosowanych.
Nie ignoruj przydatności definicji klasy rozmiaru okna i wbudowanych interfejsów API. Nie używaj przestarzałych interfejsów API do obliczania rozmiaru okna.
Wycofane interfejsy API
Starsze interfejsy API platformy nie mierzą prawidłowo okna aplikacji. Niektóre mierzą ekran urządzenia, a nie uwzględniają interfejsu systemu.
Użyj właściwości WindowManager#getCurrentWindowMetrics()
i WindowMetrics#getBounds()
, aby określić rozmiar okna aplikacji. Aby uzyskać układ interfejsu, użyj WindowMetrics#getDensity()
.
Nie używaj tych przestarzałych interfejsów API Display
do określania rozmiaru okna:
getSize()
: wycofane w Androidzie 11 (poziom API 30)getMetrics()
: wycofane w Androidzie 11 (poziom API 30)getRealSize()
: wycofane w Androidzie 12 (poziom 31 interfejsu API)getRealMetrics()
: wycofane w Androidzie 12 (poziom API 31)
Compose
Jetpack Compose jest przeznaczony do tworzenia adaptacyjnych interfejsów użytkownika. Brak kodu XML, plików układu i kwalifikatorów zasobów. Bezstanowe komponenty natywne oparte na Kotlinie, takie jak Column
, Row
i Box
, które opisują interfejs użytkownika, oraz modyfikatory, takie jak offset
, padding
i size
, które dodają zachowanie do elementów interfejsu użytkownika.
Tworzenie za pomocą usługi Compose. Bądź na bieżąco z najnowszymi funkcjami i wersjami.
Nie polegaj na przestarzałej technologii. Nie pozwól, aby Twoja aplikacja stała się przestarzała.
Tworzenie biblioteki Adaptive dla Material 3
Biblioteka Compose Material 3 Adaptive udostępnia komponenty i interfejsy API, które ułatwiają tworzenie aplikacji dostosowanych.
Aby Twoja aplikacja była dostosowywana, użyj tych interfejsów API:
NavigationSuiteScaffold
: przełącza się między paskiem nawigacyjnym a kolumną nawigacji w zależności od klasy rozmiaru okna aplikacji.ListDetailPaneScaffold
: implementuje kanoniczny układ listy i szczegółów. dostosowuje układ do rozmiaru okna aplikacji.SupportingPaneScaffold
: implementuje kanoniczny układ panelu pomocniczego.
Nie wymyślaj koła na nowo. Nie trać czasu na zwiększanie produktywności programistów za pomocą wszystkich bibliotek Jetpack Compose.
Układy
Użytkownicy oczekują, że aplikacje będą wykorzystywać dostępną przestrzeń ekranu do wyświetlania dodatkowych treści lub rozszerzonych elementów sterujących.
Aplikacje adaptacyjne optymalizują układy na podstawie zmian na wyświetlaczu, w szczególności zmian rozmiaru okna aplikacji lub zmian w pozycji urządzenia.
Zmieniaj elementy interfejsu wraz ze zmianą rozmiaru okna, aby wykorzystać dostępną przestrzeń wyświetlania. Możesz na przykład zastąpić pasek nawigacji na dole w kompaktowych rozmiarach okna poziomą listą nawigacyjną w średnich i rozwiniętych oknach. Przesuń okna dialogowe, aby były dostępne na wszystkich wyświetlaczach.
Organizuj treści w panelach, aby umożliwić wyświetlanie układów wielopanelowych, takich jak lista z informacjami i panel pomocniczy na potrzeby wyświetlania treści dynamicznych.
Jeśli nie używasz paneli treści, nie rozciągaj elementów interfejsu tylko po to, aby wypełnić dostępną przestrzeń wyświetlania. Długie linie tekstu są trudne do odczytania. Rozciągnięte przyciski wyglądają źle. Jeśli używasz Modifier.fillMaxWidth
, nie zakładaj, że jest to właściwe zachowanie we wszystkich rozmiarach wyświetlacza.
Urządzenia wejściowe
Użytkownicy nie korzystają z aplikacji tylko na ekranach dotykowych.
Aplikacje adaptacyjne obsługują zewnętrzne klawiatury, myszy i rysiki, aby zapewnić lepsze wrażenia użytkownika i pomóc mu w zwiększeniu produktywności na urządzeniach o różnych formatach.
Korzystaj z wbudowanych funkcji Androida, takich jak nawigacja za pomocą klawiatury, klikanie, wybieranie i przewijanie za pomocą myszy lub trackpada. Opublikuj skróty klawiszowe swojej aplikacji w pomocu.
Użyj biblioteki Material 3 z Jetpacka, aby umożliwić użytkownikom pisanie za pomocą rysika w dowolnym komponencie TextField
.
Nie uniemożliwiaj korzystania z alternatywnych metod wprowadzania. Nie wprowadzaj problemów z dostępnością.
Podsumowanie
- Tworzenie aplikacji za pomocą Compose i biblioteki Material 3 Adaptive
- Układy oparte na klasach rozmiarów okien
- Tworzenie układów wielopanelowych
- Umożliwienie zmiany rozmiaru aplikacji
- Nigdy nie blokuj orientacji aktywności
- Nie ograniczaj formatu obrazu
- obsługa wprowadzania danych innymi metodami niż dotyk;
- Unikanie wycofanych interfejsów API
✓ Zrób to, czego oczekują użytkownicy: zoptymalizuj aplikację pod kątem różnorodnych urządzeń, z których korzystają użytkownicy na co dzień.
✗ Nie czekaj. Zacznij już dziś.