Adaptacyjne działania – zalecenia

Aplikacje adaptacyjne obsługują wyświetlacze wszystkich rozmiarów: cały ekran urządzenia, okna o zmiennych rozmiarach w trybie wielu okien, orientację pionową i poziomą, złożone i rozłożone wyświetlacze urządzeń składanych.

Krótka lista ustawień konfiguracyjnych i interfejsów API umożliwia tworzenie aplikacji adaptacyjnych. Niektóre przestarzałe ustawienia i interfejsy API są jednak niezgodne z aplikacjami adaptacyjnymi i należy ich unikać.

Możliwość zmiany rozmiaru

Aplikacje adaptacyjne obsługują zmianę rozmiaru i tryb wielu okien.

Atrybut resizeableActivity elementów manifestu <activity> i <application> włącza lub wyłącza tryb wielu okien na Androidzie 11 (poziom interfejsu API 30) i starszych wersjach. Na Androidzie 12 (API na poziomie 31) i nowszych wersjach duże ekrany obsługują tryb wielu okien niezależnie od atrybutu. Więcej informacji znajdziesz w artykule Obsługa trybu wielu okien.

✓ Do

Włącz w aplikacji obsługę wielu okien i wielozadaniowości, aby zwiększyć produktywność i zadowolenie użytkowników.

Ustaw wartość resizeableActivity="true", jeśli Twoja aplikacja jest kierowana na poziomy interfejsu API niższe niż 24. W przeciwnym razie nie musisz nic robić – na Androidzie 7.0 (poziom interfejsu API 24) i nowszym domyślnie jest ustawiona wartość true.

✗ Nie

Nie ustawiaj wartości resizeableActivity="false" dla żadnego poziomu 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 okienkowego.

Ustawienie manifestu screenOrientation ogranicza orientację aktywności.

✓ Do

Usuń ustawienie screenOrientation z pliku manifestu aplikacji.

Zablokowanie orientacji aplikacji nie zapobiega zmianom rozmiaru okna. Aplikacje zmieniają rozmiar, gdy przechodzą w tryb wielu okien, gdy urządzenie jest składane lub rozkładane albo gdy zmieniany jest rozmiar okna typu desktopowego. Aplikacja musi obsługiwać zmiany rozmiaru okna niezależnie od ustawienia atrybutu screenOrientation.

✗ Nie

Nie ograniczaj orientacji aktywności. Aplikacje, które blokują orientację, są wyświetlane w formacie letterbox na urządzeniach z dużym ekranem i w niekompatybilnych rozmiarach okien.

Aplikacje z paskami po bokach są trudniejsze do odkrycia w Google Play na tabletach, urządzeniach składanych i urządzeniach z ChromeOS.

Format obrazu

Rozmiary ekranów i okien są różne, a co za tym idzie, różne są też ich formaty obrazu – od wysokich i wąskich po kwadratowe oraz niskie i szerokie.

Ustawienia manifestu minAspectRatio i maxAspectRatio ograniczają proporcje obrazu aplikacji do wartości zakodowanych na stałe.

✓ Do

Dostosuj aplikację do wyświetlacza niezależnie od względnych wymiarów.

Usuń ustawienia minAspectRatio i maxAspectRatio z pliku manifestu aplikacji. Możesz też zadbać o to, aby aplikacja miała możliwość zmiany rozmiaru, a format obrazu dostosowywał się automatycznie (patrz sekcja Możliwość zmiany rozmiaru).

✗ Nie

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, będzie ona wyświetlana z czarnymi paskami u góry i u dołu.

Na Androidzie 14 (poziom API 34) i nowszym użytkownicy mogą zastąpić format obrazu aplikacji, aby rozszerzyć aplikacje w formacie letterbox i wypełnić dostępny obszar wyświetlania. Zobacz Tryb zgodności z urządzeniem.

Rozmiar okna

Optymalizacja układów pod kątem różnych rozmiarów ekranu to podstawowa zasada projektowania adaptacyjnego. Aplikacje adaptacyjne koncentrują się na rozmiarze okna aplikacji, a nie na rozmiarze ekranu urządzenia. Gdy aplikacja jest wyświetlana na pełnym ekranie, jej okno zajmuje cały ekran urządzenia.

Klasy rozmiarów okien zapewniają systematyczny sposób określania i kategoryzowania rozmiaru okna aplikacji. Dostosuj aplikację, zmieniając układy w miarę zmiany klasy rozmiaru okna aplikacji.

✓ Do

Oceń rozmiar okna aplikacji na podstawie klas rozmiarów okien.

Aby określić klasę rozmiaru okna, użyj funkcji najwyższego poziomu currentWindowAdaptiveInfoV2() z biblioteki adaptacyjnej Compose Material 3 (która zastępuje wycofaną funkcję currentWindowAdaptiveInfo()). Więcej informacji znajdziesz w artykule Tworzenie aplikacji adaptacyjnych.

✗ Nie

Nie lekceważ przydatności definicji klas rozmiaru okna i wbudowanych interfejsów API. Nie używaj wycofanych 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 inne wykluczają elementy dekoracyjne systemu.

✓ Do

Użyj WindowManager#getCurrentWindowMetrics() i WindowMetrics#getBounds(), aby uzyskać rozmiar okna aplikacji. Użyj WindowMetrics#getDensity(), aby uzyskać gęstość wyświetlania.

✗ Nie

Nie używaj tych wycofanych interfejsów API Display do określania rozmiaru okna:

  • getSize(): wycofane w Androidzie 11 (poziom 30 interfejsu API)
  • getMetrics(): wycofane w Androidzie 11 (poziom 30 interfejsu API)
  • getRealSize(): wycofany w Androidzie 12 (poziom 31 interfejsu API)
  • getRealMetrics(): wycofany w Androidzie 12 (poziom 31 interfejsu API)

Utwórz

Jetpack Compose został zaprojektowany z myślą o tworzeniu adaptacyjnych interfejsów. Brak plików XML, plików układu i kwalifikatorów zasobów. Są to tylko bezstanowe funkcje kompozycyjne oparte na Kotlinie, takie jak Column, Row i Box, które opisują interfejs, oraz modyfikatory, takie jak offset, padding i size, które dodają zachowanie do elementów interfejsu.

✓ Do

Twórz za pomocą Compose. Bądź na bieżąco z najnowszymi funkcjami i wersjami.

✗ Nie

Nie polegaj na przestarzałej technologii. Nie pozwól, aby Twoja aplikacja stała się przestarzała.

Biblioteka adaptacyjna Compose Material 3

Biblioteka adaptacyjna Compose Material 3 zawiera komponenty i interfejsy API, które ułatwiają tworzenie aplikacji adaptacyjnych.

✓ Do

Aby dostosować aplikację, użyj tych interfejsów API:

  • NavigationSuiteScaffold: przełącza się między paskiem nawigacyjnym a panelem nawigacyjnym w zależności od klasy rozmiaru okna aplikacji.
  • ListDetailPaneScaffold: implementuje kanoniczny układ szczegółowej listy. Dopasowuje układ do rozmiaru okna aplikacji.
  • SupportingPaneScaffold: implementuje kanoniczny układ panelu pomocniczego.
✗ Nie

Nie musisz wymyślać koła na nowo. Nie przegap wzrostu produktywności deweloperów, jaki zapewniają wszystkie biblioteki Jetpack Compose.

Układy

Użytkownicy oczekują, że aplikacje będą w pełni wykorzystywać dostępną przestrzeń wyświetlania, prezentując dodatkowe treści lub ulepszone elementy sterujące.

Aplikacje adaptacyjne optymalizują układy na podstawie zmian na wyświetlaczu, w szczególności zmian rozmiaru okna aplikacji lub zmian pozycji urządzenia.

✓ Do

zmieniać komponenty interfejsu w miarę zmiany rozmiaru okna, aby wykorzystać dostępną przestrzeń wyświetlania; Możesz na przykład zamienić dolny pasek nawigacyjny używany w przypadku małych okien na pionową kolumnę nawigacji w przypadku średnich i dużych okien. Zmiana położenia okien, aby były dostępne na wszystkich wyświetlaczach.

Organizuj treści w panelach, aby umożliwić korzystanie z układów wielopanelowych, takich jak lista-szczegóły i panel pomocniczy do wyświetlania dynamicznych treści.

✓ Zrób to: wyświetlaj listę i szczegóły aktywności w układzie dwupanelowym.
✗ Nie

Jeśli nie używasz paneli treści, nie rozciągaj elementów interfejsu, aby wypełnić dostępną przestrzeń wyświetlania. Długie wiersze tekstu są trudne do odczytania. Rozciągnięte przyciski wyglądają na źle zaprojektowane. Jeśli używasz Modifier.fillMaxWidth, nie zakładaj, że to właściwe działanie w przypadku wszystkich rozmiarów ekranu.

✗ Nie: układ rozciągnięty, aby wypełnić powiększające się okno.

Urządzenia wejściowe

Użytkownicy nie tylko korzystają z ekranów dotykowych do interakcji z aplikacjami.

Aplikacje adaptacyjne obsługują zewnętrzne klawiatury, myszy i rysiki, co zapewnia lepsze wrażenia użytkownika i zwiększa produktywność na urządzeniach o różnych rozmiarach.

✓ Do

Skorzystaj z wbudowanych funkcji platformy Android do nawigacji za pomocą klawisza Tab oraz klikania, zaznaczania i przewijania za pomocą myszy lub trackpada. Opublikuj skróty klawiszowe aplikacji w panelu skrótów klawiszowych.

Użyj biblioteki Material 3 Jetpack, aby umożliwić użytkownikom pisanie w dowolnym komponencie TextField za pomocą rysika.

✗ Nie

Nie uniemożliwiaj korzystania z alternatywnych metod wprowadzania. Nie wprowadzaj problemów z dostępnością.

Podsumowanie

  • Tworzenie aplikacji za pomocą Compose i biblioteki adaptacyjnej Material 3
  • Tworzenie układów na podstawie klas rozmiarów okien
  • Tworzenie układów wielopanelowych
  • Umożliwianie zmiany rozmiaru aplikacji
  • Nigdy nie blokuj orientacji aktywności
  • Nie ograniczaj formatu obrazu
  • Obsługa wprowadzania danych w inny sposób niż dotykowo
  • Unikanie wycofanych interfejsów API

✓ Spełniaj oczekiwania użytkowników: optymalizuj aplikację pod kątem różnorodności urządzeń, z których ludzie korzystają na co dzień.

✗ Nie czekaj. Dołącz do nas już dziś!