Szkielet aplikacji do obsługi wielu ekranów

94

Jak wiemy, Android jest wyposażony w różne urządzenia, które mają różne funkcje, rozdzielczość i rozmiar ekranu, więc podczas tworzenia aplikacji obsługującej wiele (małych i dużych) ekranów pojawia się przeszkoda w rozmiarze i układzie.

Prowadzi to do różnych kombinacji rozmiarów ekranu, rozdzielczości i DPI i stwarza spore wyzwanie podczas projektowania i programowania na urządzenia z Androidem. Podczas gdy niektórzy inni producenci (spoza Androida) mają różne rozdzielczości i DPI, mają ten sam rozmiar ekranu, a rozdzielczości mają ten sam współczynnik proporcji. W związku z tym można utworzyć obraz pasujący do urządzeń innych niż Android.

Moje pytanie brzmi, czy istnieje odpowiedni przepływ lub architektura, którą należy przestrzegać, aby spełnić wymagania?

wprowadź opis obrazu tutaj

Pamiętaj, że mamy tablety o różnych rozmiarach i rozdzielczości.

Zdaję sobie sprawę, że programista Android zawiera te informacje, ale mój pogląd pochodzi z implementacji.

Z mojej wiedzy zrozumiałem, że do projektowania grafiki na Androida nawet programista musi znać koncepcję projektowania.

Mohammed Azharuddin Shaikh
źródło
14
Czy jesteście pewni, że to pytanie nie jest konstruktywne?
Mohammed Azharuddin Shaikh
6
Myślę, że jest to bardzo konstruktywne. Chciałby poznać przyczyny negatywnych głosów.
Lazy Ninja
11
@MKJParekh wziąć MicroMax Funbook gsmarena.com/micromax_funbook_p300-4701.php 7", 480X800, Ldpi (133 dpi) możesz mi powiedzieć w jakiej kategorii (drawble dużym lub Ldpi czy Android v3.0 SW-480) będzie spadać?
Mohammed Azharuddin Shaikh
1
@LazyNinja przyczyną głosów negatywnych są szaleńcy i szaleni ludzie. Ci, którzy myślą, że mogą zadawać tylko konstruktywne pytania: p
AZ_,
1
@AZ_ :) Użyliśmy tej struktury res w folderze res drawable-hdpi drawable-hdpi-v11 drawable-hdpi-v9 drawable-large-drawable-large-hdpi drawable-ldpi drawable-mdpi drawable-mdpi-v11 drawable-small drawable- xhdpi drawable-xhdpi-v11 drawable-xxhdpi drawable-xxhdpi-v11 layout-small layout-sw530dp layout-sw720dp layout-xlarge values ​​values-sw530dp values-sw720dp values-v14 values-xlarge i zastosuj dobrze zdefiniowane wymiary w xml z folderu wartości . FYKI nasza aplikacja obsługuje ponad 5 tys. Typów urządzeń.
MKJParekh

Odpowiedzi:

147

Wreszcie stworzyłem strukturę, która obsługuje układy i ikony dla wielu ekranów.

Android generalizuje wyświetlanie urządzenia na kategorie na podstawie dwóch parametrów:

  • Rozmiar ekranu, fizyczny rozmiar wyświetlacza (mierzony po przekątnej)
  • Gęstość ekranu, fizyczna gęstość pikseli wyświetlacza (w pikselach na cal lub ppi) "

Aby szybko określić rozmiar i gęstość ekranu, zainstaluj „ Jaki jest mój rozmiar ” na Androida.

Rozmiar ekranu

Android definiuje cztery uogólnione rozmiary ekranu:


 Qualifier           Size

 small               ~3 inches (approx) 
 normal              ~4 inches (approx) 
 large               Exceeds 4 inches    
 xlarge              Exceeds 7 inches  
  • Większość telefonów jest klasyfikowana jako małe lub normalne (około 3 do 4 cali po przekątnej). Ale teraz jest wiele telefonów z dużym ekranem, takich jak Galaxy S4, HTC One, Xperia Z
  • Mały tablet, taki jak Samsung Galaxy Tab, jest klasyfikowany jako duży (większy niż 4 cale)
  • Bardzo duże dotyczy dużych urządzeń, na przykład dużych tabletów

Android definiuje cztery uogólnione gęstości ekranu:


 Qualifier         Description         Nominal value

 ldpi              low density          120 ppi
 mdpi              medium density       160 ppi
 hdpi              high density         240 ppi
 xhdpi             extra high density   320 ppi

Zazwyczaj:

  • rozmiar ekranu ma największy wpływ na układy aplikacji
  • gęstość ekranu ma największy wpływ na obraz i zasoby graficzne

Podana jest tutaj procentowa różnica ekranu urządzenia

  • Ldpi - 75%
  • Mdpi- 100% (podstawa według witryny programistów Androida)
  • Hdpi - 150%
  • XHdpi - 200%

wprowadź opis obrazu tutaj

Ale jak wiemy teraz, większość urządzeń ma 480X800, więc uważam to za urządzenie bazowe , więc nasze nowe obliczenia będą się podobać

  • Ldpi - 50%
  • Mdpi - 66,67%
  • Hdpi - 100%
  • XHdpi - 133,33%

co oznacza, że ​​pierwsza ikona i projekt zostaną utworzone tylko dla rozdzielczości 480X800, a następnie dla pozostałych (tj. Ldpi, Mdpi, Xhdpi).

Istnieją obrazy, które są wspólne dla wszystkich układów i muszą być jednolite pod względem koloru i kształtu (bez złożonego kształtu, bez krzywej), więc dla tego rodzaju obrazu tworzymy, 9patchktóry ma być umieszczony w folderze „drawable (no-suffix)”. Aby stworzyć obraz 9Patch, możesz użyć DrawNinePatch lub BetterNinePatch

Teraz po prostu zmień nazwy swoich obrazów na podstawie standardów Androida i uzupełnij aplikację, hdpia następnie po prostu weź drawable-hdpifolder i otwórz Adode Photoshop (zalecane) utwórz akcję o wielu rozmiarach (po prostu zmień rozmiar zgodnie ze współczynnikiem procentowym) po utworzeniu akcji dla wszystkich rozmiarów, a następnie po prostu wykonaj Batch Automatyzuj i podaj źródło (drawable-hdpi) i miejsce docelowe (drawable-ldpi, drawable-mdpi, drawable-xdpi).

Powodem, dla którego nalegam, abyś używał programu Photoshop, ponieważ automatycznie zmieni rozmiar obrazu za pomocą akcji i jeszcze jeden plus, jest to, że nie musisz zmieniać nazwy pliku (nada mu taką samą nazwę jak oryginalna).

po zakończeniu tworzenia wszystkich obrazów odśwież projekt i przetestuj go.

Czasami może istnieć możliwość, że układ obsługujący ekran (xhdpi, hdpi, mdpi) może zostać przycięty na małym ekranie (ldpi), więc do obsługi tego wystarczy utworzyć dla niego oddzielny folder Layout (layout-small) i dodać ScrollView(głównie). Otóż ​​to.

Tabletki Tabletki są podzielone na dwie kategorie.

  1. 7 "(1024X (600-48 (pasek nawigacyjny))) = 1024X552 (do rysowania - duży)
  2. 10 "(1280X (800-48 (pasek nawigacyjny))) = 1280X752 (wysuwany - duży)

W tym celu musimy stworzyć obraz dla obu ekranów i po prostu odpowiednio je umieścić

Podsumowując, będziemy mieć ten folder w naszej aplikacji do obsługi wielu ekranów.

drawable
drawable-ldpi
drawable-mdpi
drawable-hdpi
drawable-xhdpi
drawable-large
drawable-xlarge

będzie bardziej kombinacją kwalifikatorów z Screen size and Screen density

drawable-large-ldpi
drawable-large-mdpi
drawable-large-hdpi
drawable-large-xhdpi

więcej kwalifikatora z Screen density and Version

drawable-ldpi-v11
drawable-mdpi-v11
drawable-hdpi-v11
drawable-xhdpi-v11

i więcej kwalifikatora z Screen size and Version

drawable-large-v11
drawable-xlarge-v11

i więcej kwalifikatora z Smallest width concept(SW)

 drawable-sw???dp

Co więcej, w Androidzie V3.0 Honeycomb wprowadzili nową koncepcję, SW(smallest width)w której urządzenia są kategoryzowane według szerokości ekranu, więc jeśli tworzymy folder o nazwie, drawable-sw360dpurządzenie z 720 dp (szerokość lub wysokość) będzie używać zasobów z tego folderu.

na przykład, aby znaleźć przyrostek Samsung Galaxy S3 dp do sufiksu do rysowania-sw? dp
W odniesieniu do obliczania DP , jeśli chcesz wspierać swój układ lub rysować do S3, to obliczenia mówią

px = szerokość urządzenia = 720
dpi = gęstość urządzenia = 320

podana formuła

    px = dp * (dpi / 160)

zmienna formuła, ponieważ mamy wartość px

    dp = px / (dpi / 160)

teraz dodając wartość,

     dp= 720 / (320/160);
     dp=360. 

więc drawable-sw360dp wykona pracę

Pobierz konfigurację urządzenia z GsmArena W ten sam sposób możesz również utworzyć folder zgodnie z wersją Android API urządzenia, tj. Drawable-hdpi-v11`, więc urządzenie, które ma API11 i jest Hdpi, będzie używać tych zasobów.

Dodatkowe wskazówki:

  • Użyj układów względnych, dp, sp i mm

    Jednostki dp - niezależne od urządzenia piksele znormalizowane do 1 fizycznego piksela na ekranie o rozdzielczości 160 ppi, czyli średniej gęstości. Skalowany w czasie wykonywania. Służy do wymiarowania elementów ekranu

    jednostki sp - przeskalowane piksele, określone jako wartości zmiennoprzecinkowe, na podstawie jednostek dp, ale dodatkowo skalowane zgodnie z ustawieniem preferencji użytkownika dotyczących rozmiaru czcionki. Skalowany w czasie wykonywania. Użyj dla rozmiarów czcionek

    dla układów należy zawsze używać RelativeLayout; AbsoluteLayout jest przestarzałe i nie powinno być używane.

  • Użyj odpowiednich formatów obrazu - PNG lub JPEG

    Android "prefers" PNG for bitmap image files, "accepts" JPEG, and "discourages" GIF.

    Jednak PNG i JPEG nie są odpowiednikami. Mają różne kompromisy dotyczące jakości, a PNG nie zawsze jest najlepsze:

    JPEG może zapewnić do 50% redukcję rozmiaru pliku w porównaniu z PNG, co jest istotne, jeśli Twoja aplikacja intensywnie obsługuje obrazy

    „Stratny” plik JPEG o wyższej jakości może wyglądać lepiej niż mocno skompresowany „bezstratny” plik PNG przy tym samym rozmiarze pliku

  • Dodaj etykiety do obrazów i grafiki w celu debugowania

  • Użyj elementu podpory-ekrany

  • Skonfiguruj swoje emulatory z rzeczywistymi wartościami urządzeń

    Zwykle komputery stacjonarne wyświetlają się z rozdzielczością 72 ppi (Mac) lub 96 ppi (Windows, Linux). W porównaniu z urządzeniami przenośnymi wyświetlacze stacjonarne mają zawsze niską gęstość.

    Zawsze konfiguruj emulatory Androida tak, aby naśladowały rzeczywiste wartości urządzeń, i zawsze ustawiaj je na skalowanie, aby emulować gęstość urządzenia.

    W Eclipse łatwo jest utworzyć wiele emulatorów (z paska menu Eclipse wybierz Okno> AVD Manager> Nowy ) skonfigurowanych z wartościami dla rzeczywistych urządzeń:

    Nazwij emulator dla rzeczywistego urządzenia, które emuluje Określ rozdzielczość, nie używaj Wbudowane rozmiary ogólne Ustaw gęstość urządzenia, aby pasowała do rzeczywistego urządzenia (w panelu Sprzęt ustaw abstrakcyjną właściwość LCD na gęstość rzeczywistą, zawsze wartość całkowitą)

    Po uruchomieniu urządzenia zawsze wybieraj opcję Skaluj wyświetlacz do rzeczywistego rozmiaru i wpisz rzeczywisty wymiar ekranu w calach.

    Jeśli nie ustawisz gęstości urządzenia, emulator domyślnie ustawia niską gęstość i zawsze ładuje zasoby specyficzne dla ldpi. Rozdzielczość (wymiary w pikselach) będą poprawne, ale zasoby obrazu zależne od gęstości nie będą wyświetlane zgodnie z oczekiwaniami.

    Oczywiście nic, co zrobisz, nie odtworzy jakości obrazu o wyższej gęstości na wyświetlaczu biurkowym o niższej gęstości.

Oto dane zebrane w ciągu 7 dni kończących się 1 października 2012 r. Aby zobaczyć najnowsze statystyki dotyczące wersji platformy Androida, przejdź tutaj

Na podstawie rozmiaru ekranu

wprowadź opis obrazu tutaj

Na podstawie gęstości ekranu

wprowadź opis obrazu tutaj

ostry
źródło
2
W przypadku karty Samsung Galaxy 7 "musimy trzymać obrazy w formacie drawable-large-hdpi, w przeciwnym razie obraz zostanie rozciągnięty lub
zmniejszony
@rajpara jest wiele kombinacji i permutacji, wszystkie takie przypadki uwzględnimy później.
Mohammed Azharuddin Shaikh
1
zobacz @AlexBonel, tak Zgadzam się z tobą, ale moim głównym mottem jest uświadomienie sobie, jak można coś zrobić, jeśli chodzi o obsługę wielu ekranów. Można modyfikować / manipulować tym przepływem / koncepcją, ponieważ powyższe ma na celu wyjaśnienie początkowego problemu. Dodatkowo ja też dokonuję modyfikacji w oparciu o projekt aplikacji. Twój post daje mi poczucie, że zrozumiałeś koncepcję. Mam nadzieję, że zrozumiałeś mój punkt widzenia.
Mohammed Azharuddin Shaikh
1
Niezła odpowiedź. Po wielu poszukiwaniach i tylu dniach, dlaczego zdarzają się te wyjątki, otrzymałem ten post jako najlepszą odpowiedź ze świetnym przykładem i wyjaśnieniem. np. rozważ 7-calowy tablet Halo Value. PPI = 133. Rozdzielczość = 480 * 800. Rozmiar = 7 cali. Jeśli weźmiemy pod uwagę mdpi jako podstawę, powinien on przyjmować wymiar określony w values-sw480, ale przyjmuje wymiar z values-sw600. Nie rozumiem, dlaczego tak się dzieje. Naprawdę bardzo dziękuję za Twój post. Oszczędzaj czas i usuń zamieszanie. Myślę, że powinno to być na oficjalnej stronie Androida. Doceniam twój wysiłek.
Smeet
1
Myślę, że to najlepsza odpowiedź, jaką kiedykolwiek widziałem. Takiej odpowiedzi szukam od dawna. I w końcu to dostałem. Dziękuję wszystkim za wkład w tę odpowiedź, aby była bardziej zrozumiała.
Hiren Dixit
1

Projektanci powinni tworzyć podstawowe projekty

base size of mdpi devices * density conversion factor of highest supported density bucket
Rozmiar ekranu podstawowego to 320 x 480 pikseli, a segmenty gęstości są następujące:

  • ldpi: 0,75
  • mdpi: 1,0 (gęstość podstawowa)
  • hdpi: 1,5
  • xhdpi: 2.0.0
  • xxhdpi: 3.0
  • xxxhdpi: 4.0

Aby zająć się dodatkową dostępną przestrzenią na urządzeniach z Androidem, należy używać rozciągliwych komponentów w obu kierunkach (poziomo i pionowo). Szczegółowe informacje dostępne są tutaj:

http://vinsol.com/blog/2014/11/20/tips-for-designers-from-a-developer/

Alok Vaish
źródło