Udostępnij za pośrednictwem


Tworzenie zasobów dla różnych ekranów

Sam system Android działa na wielu różnych urządzeniach, z których każda ma szeroką gamę rozdzielczości, rozmiarów ekranu i gęstości ekranu. System Android przeprowadzi skalowanie i zmianę rozmiaru, aby aplikacja działała na tych urządzeniach, ale może to spowodować nie optymalne środowisko użytkownika. Na przykład obrazy mogą być rozmyte lub mogą być umieszczone zgodnie z oczekiwaniami w widoku.

Pojęcia

Kilka terminów i pojęć należy zrozumieć, aby obsługiwać wiele ekranów.

  • Rozmiar ekranu — ilość miejsca fizycznego do wyświetlania aplikacji

  • Gęstość ekranu — liczba pikseli w dowolnym obszarze na ekranie. Typowa jednostka miary to kropki na cal (dpi).

  • Rozdzielczość — łączna liczba pikseli na ekranie. Podczas tworzenia aplikacji rozdzielczość nie jest tak ważna, jak rozmiar ekranu i gęstość.

  • Piksel niezależny od gęstości (dp) — wirtualna jednostka miary umożliwiająca zaprojektowanie układów niezależnie od gęstości. Ta formuła służy do konwertowania programu dp na piksele ekranu:

    px = dp × dpi ÷ 160

  • Orientacja — orientacja ekranu jest uważana za poziomą, gdy jest szersza niż jest wysoka. Natomiast orientacja pionowa jest wtedy, gdy ekran jest wyższy niż jest szeroki. Orientacja może ulec zmianie w okresie istnienia aplikacji, gdy użytkownik obraca urządzenie.

Zwróć uwagę, że pierwsze trzy z tych pojęć są ze sobą powiązane — zwiększenie rozdzielczości bez zwiększenia gęstości zwiększy rozmiar ekranu. Jednak jeśli zarówno gęstość, jak i rozdzielczość zostaną zwiększone, rozmiar ekranu może pozostać niezmieniony. Ta relacja między rozmiarem ekranu, gęstością i rozdzielczością komplikuje obsługę ekranu szybko.

Aby pomóc w radzeniu sobie z tą złożonością, struktura systemu Android woli używać pikseli niezależnych od gęstości (dp) dla układów ekranu. Używając niezależnych pikseli gęstości, elementy interfejsu użytkownika będą wyświetlane użytkownikowi, aby mieć taki sam rozmiar fizyczny na ekranach z różnymi gęstościami.

Obsługa różnych rozmiarów i gęstości ekranu

System Android obsługuje większość pracy w celu poprawnego renderowania układów dla każdej konfiguracji ekranu. Istnieją jednak pewne działania, które można podjąć, aby pomóc systemowi.

Użycie pikseli niezależnych od gęstości zamiast rzeczywistych pikseli w układach jest wystarczające w większości przypadków, aby zapewnić niezależność gęstości. System Android przeprowadzi skalowanie elementów rysowalnych w czasie wykonywania do odpowiedniego rozmiaru. Istnieje jednak możliwość, że skalowanie spowoduje, że mapy bitowe pojawią się rozmyte. Aby obejść ten problem, podaj alternatywne zasoby dla różnych gęstości. Podczas projektowania urządzeń pod kątem wielu rozdzielczości i gęstości ekranu łatwiej będzie rozpocząć od obrazów o wyższej rozdzielczości lub gęstości, a następnie skalowania w dół.

Deklarowanie obsługiwanego rozmiaru ekranu

Deklarowanie rozmiaru ekranu gwarantuje, że tylko obsługiwane urządzenia będą mogły pobrać aplikację. Jest to realizowane przez ustawienie elementu supports-screens w pliku AndroidManifest.xml . Ten element służy do określania rozmiarów ekranu obsługiwanych przez aplikację. Dany ekran jest uznawany za obsługiwany, jeśli aplikacja może prawidłowo umieścić układy na ekranie wypełnienia. Korzystając z tego elementu manifestu, aplikacja nie będzie wyświetlana w sklepie Google Play dla urządzeń, które nie spełniają specyfikacji ekranu. Jednak aplikacja będzie nadal działać na urządzeniach z nieobsługiwanymi ekranami, ale układy mogą wydawać się rozmyte i pikselowane.

Obsługiwane szóstki ekranu są deklarowane w pliku Properites/AndroidManifest.xml rozwiązania:

Edytuj AndroidManifest.xml , aby uwzględnić ekrany obsługujące:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          android:versionCode="1"
          android:versionName="1.0"
          package="HelloWorld.HelloWorld">
      <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="27" />
      <supports-screens android:resizable="true"
                        android:smallScreens="true"
                        android:normalScreens="true"
                        android:largeScreens="true" />
      <application android:allowBackup="true"
                   android:icon="@mipmap/ic_launcher"
                   android:label="@string/app_name"
                   android:roundIcon="@mipmap/ic_launcher_round"
                   android:supportsRtl="true" android:theme="@style/AppTheme">
  </application>
</manifest>

Udostępnianie alternatywnych układów dla różnych rozmiarów ekranu

Układy alternatywne umożliwiają dostosowanie widoku dla rozmiaru ekranu specyfikacji, zmiany położenia lub rozmiaru elementów interfejsu użytkownika składnika.

Począwszy od poziomu interfejsu API 13 (Android 3.2), rozmiary ekranu są przestarzałe na rzecz używania kwalifikatora swNdp. Ten nowy kwalifikator deklaruje ilość miejsca potrzebnego dla danego układu. Zaleca się, aby aplikacje, które mają być uruchamiane w systemie Android 3.2 lub nowszym, powinny używać tych nowszych kwalifikatorów.

Jeśli na przykład układ wymaga co najmniej 700 dp szerokości ekranu, alternatywny układ będzie przechodzić w układzie folderu sw700dp:

Poniżej przedstawiono kilka liczb dla różnych urządzeń:

  • Typowy telefon – 320 dp: typowy telefon

  • Tablet 5" / "tweener" urządzenie – 480 dp: na przykład Samsung Note

  • Tablet 7" – 600 dp: taki jak Barnes & Noble Nook

  • Tablet 10" – 720 dp: taki jak Kolo Xoom

W przypadku aplikacji docelowych poziomów interfejsu API do 12 (Android 3.1) układy powinny znajdować się w katalogach korzystających z kwalifikatorów małych/dużych/dużych/xlarge jako uogólnień różnych rozmiarów ekranu, które są dostępne w większości urządzeń. Na przykład na poniższej ilustracji istnieją alternatywne zasoby dla czterech różnych rozmiarów ekranu:

Poniżej przedstawiono porównanie, w jaki sposób starsze kwalifikatory rozmiaru ekranu poziomu 13 przed interfejsem API są porównywane z pikselami niezależnymi od gęstości:

  • 426 dp x 320 dp jest mały

  • 470 dp x 320 dp jest normalne

  • 640 dp x 480 dp jest duży

  • 960 dp x 720 dp to xlarge

Nowsze kwalifikatory rozmiaru ekranu na poziomie 13 interfejsu API i mają wyższy priorytet niż starsze kwalifikatory ekranu poziomów interfejsu API 12 i niższe. W przypadku aplikacji, które będą obejmować stare i nowe poziomy interfejsu API, może być konieczne utworzenie alternatywnych zasobów przy użyciu obu zestawów kwalifikatorów, jak pokazano na poniższym zrzucie ekranu:

Podaj różne mapy bitowe dla różnych gęstości ekranu

Mimo że system Android będzie skalować mapy bitowe w razie potrzeby dla urządzenia, same mapy bitowe mogą nie być elegancko skalowane w górę lub w dół: mogą stać się rozmyte lub rozmyte. Zapewnienie map bitowych odpowiednich dla gęstości ekranu spowoduje złagodzenie tego problemu.

Na przykład poniższy obraz jest przykładem problemów z układem i wyglądem, które mogą wystąpić, gdy nie podano zasobów określających gęstość.

Zrzuty ekranu bez zasobów gęstości

Porównaj ten układ z układem zaprojektowanym z zasobami specyficznymi dla gęstości:

Zrzuty ekranu z zasobami specyficznymi dla gęstości

Tworzenie różnych zasobów gęstości za pomocą programu Android Asset Studio

Tworzenie tych map bitowych o różnych gęstościach może być nieco żmudne. W związku z tym Google stworzyło narzędzie online, które może zmniejszyć część tedium związane z tworzeniem tych map bitowych o nazwie Android Asset Studio.

Android Asset Studio

Ta witryna internetowa pomoże w tworzeniu map bitowych przeznaczonych dla czterech typowych gęstości ekranu, zapewniając jeden obraz. Program Android Asset Studio utworzy mapy bitowe z pewnymi dostosowaniami, a następnie umożliwi pobranie ich jako pliku zip.

Porady dotyczące wielu ekranów

System Android działa na oszałamiającej liczbie urządzeń, a kombinacja rozmiarów ekranu i gęstości ekranu może wydawać się przytłaczająca. Poniższe wskazówki mogą pomóc zminimalizować nakład pracy niezbędny do obsługi różnych urządzeń:

  • Tylko projektowanie i opracowywanie pod kątem potrzebnych elementów — istnieje wiele różnych urządzeń, ale niektóre istnieją w rzadkich czynnikach, które mogą wymagać znacznego wysiłku w zakresie projektowania i opracowywania. Pulpit nawigacyjny Rozmiar ekranu i gęstość to strona udostępniana przez firmę Google, która udostępnia dane dotyczące podziału macierzy rozmiaru ekranu/gęstości ekranu. Ten podział zawiera szczegółowe informacje na temat sposobu programowania na ekranach pomocniczych.

  • Używaj adresów DPs, a nie pikseli — piksele stają się kłopotliwe, gdy zmienia się gęstość ekranu. Nie należy kodować wartości pikseli na stałe. Unikaj pikseli na rzecz dp (pikseli niezależnych od gęstości).

  • Unikaj elementu AbsoluteLayoutGdziekolwiek to możliwe — jest przestarzały na poziomie interfejsu API 3 (Android 1.5) i będzie powodować kruche układy. Nie należy go używać. Zamiast tego spróbuj użyć bardziej elastycznych widżetów układu, takich jak LinearLayout, RelativeLayout lub nowy element GridLayout.

  • Wybierz jedną orientację układu jako domyślną — na przykład zamiast dostarczać alternatywny układ zasobów — układ i port układu, umieść zasoby dla krajobrazu w układzie i zasoby dla portretu na porcie układu.

  • Use LayoutParams for Height and Width — podczas definiowania elementów interfejsu użytkownika w pliku układu XML aplikacja systemu Android korzystająca z wartości wrap_content i fill_parent będzie miała większy sukces, zapewniając prawidłowy wygląd na różnych urządzeniach niż używanie jednostek niezależnych od pikseli lub gęstości. Te wartości wymiarów powodują, że system Android może skalować zasoby mapy bitowej odpowiednio. Z tego samego powodu jednostki niezależne od gęstości są najlepiej zarezerwowane podczas określania marginesów i wypełnienia elementów interfejsu użytkownika.

Testowanie wielu ekranów

Aplikacja systemu Android musi być przetestowana pod kątem wszystkich konfiguracji, które będą obsługiwane. W idealnym przypadku urządzenia powinny być testowane na rzeczywistych urządzeniach, ale w wielu przypadkach nie jest to możliwe lub praktyczne. W takim przypadku użycie emulatora i konfiguracji urządzeń wirtualnych z systemem Android dla każdej konfiguracji urządzenia będzie przydatne.

Zestaw Android SDK udostępnia niektóre skórki emulatora, które mogą służyć do tworzenia avD, zreplikuje rozmiar, gęstość i rozdzielczość wielu urządzeń. Wielu dostawców sprzętu zapewnia również skóry dla swoich urządzeń.

Inną opcją jest korzystanie z usług usługi testowania innej firmy. Te usługi przejmą pakiet APK, uruchomią go na wielu różnych urządzeniach, a następnie przekażą opinię na temat działania aplikacji.