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ść.
Porównaj ten układ z układem zaprojektowanym 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.
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.