Rozmiary ekranu powitalnego Androida pasują do wszystkich urządzeń

Mam pełnoekranowy PNG, który chcę wyświetlić na splash. Jest tylko jeden błąd i nie mam pojęcia jaki rozmiar umieścić w każdym folderze (ldpi, mdpi, hdpi, i xhdpi). Moja aplikacja ma działać dobrze i pięknie na wszystkich telefonach i tabletach. Jakie rozmiary (w pikselach) należy utworzyć, aby splash wyświetlał się ładnie na wszystkich ekranach?

Author: Peter Mortensen, 2012-05-13

9 answers

Disclaimer

Ta odpowiedź pochodzi z 2013 roku i jest poważnie przestarzała. Począwszy od Androida 3.2 istnieje teraz 6 grup gęstości ekranu. Ta odpowiedź zostanie zaktualizowana tak szybko, jak będę mógł, ale bez ETA. Zobacz oficjalną dokumentację dla wszystkich gęstości w tej chwili (chociaż informacje na temat konkretnych rozmiarów pikseli są jak zawsze trudne do znalezienia).

Oto wersja tl / dr

  • Utwórz 4 obrazy, po jednym dla każdej gęstości ekranu:

    • xlarge ( xhdpi): 640x960
    • Duży (hdpi): 480x800
    • medium (mdpi): 320x480
    • mały( ldpi): 240x320
  • Przeczytaj 9-patch image introduction W Android Developer Guide

  • projektuj obrazy, które mają obszary, które można bezpiecznie rozciągnąć bez uszczerbku dla efektu końcowego

Dzięki temu Android wybierze odpowiedni plik dla gęstości obrazu urządzenia, a następnie rozciągnie obraz zgodnie z 9-łatką standard.

Koniec tl; Dr. pełny post przed

[2]}odpowiadam w odniesieniu do aspektu związanego z projektem pytania. Nie jestem programistą, więc nie będę w stanie dostarczyć kodu do implementacji wielu z dostarczonych rozwiązań. Niestety, moją intencją jest pomoc projektantom, którzy są tak samo zagubieni, jak ja, gdy pomagałem w tworzeniu mojej pierwszej aplikacji na Androida. Dopasowanie do wszystkich rozmiarów]} Z Androidem, firmy mogą rozwijać swoje telefony komórkowe i stoły niemal każdej wielkości, z prawie każdym chcą rozdzielczości. Z tego powodu nie ma "odpowiedniego rozmiaru obrazu" dla ekranu powitalnego, ponieważ nie ma stałych rozdzielczości ekranu. Stanowi to problem dla osób, które chcą zaimplementować ekran powitalny.

Czy Twoi użytkownicy naprawdę chcą zobaczyć ekran powitalny?

(na marginesie, ekrany powitalne są nieco zniechęcane wśród facetów od użyteczności. Twierdzi się, że użytkownik już wie, na jakiej aplikacji nacisnął, a znakowanie obrazu za pomocą ekranu powitalnego nie jest konieczne, ponieważ tylko przerywa doświadczenie użytkownika z "reklamą". Należy go jednak używać w aplikacjach, które wymagają znacznego obciążenia po zainicjowaniu (5s+), w tym gier i tym podobnych, aby użytkownik nie zastanawiał się, czy aplikacja się zawiesiła, czy nie)

Gęstość ekranu; 4 klasy

Biorąc pod uwagę tak wiele różnych rozdzielczości ekranu w telefonach dostępnych na rynku, Google wdrożyło kilka alternatyw i sprytnych rozwiązań, które mogą pomóc. Pierwszą rzeczą, którą musisz wiedzieć, jest to, że Android oddziela wszystkie ekrany na 4 różne gęstości ekranu:

  1. niska gęstość (ldpi ~ 120dpi)
  2. średnia gęstość (mdpi ~ 160dpi)
  3. Wysoka gęstość (hdpi ~ 240dpi)
  4. bardzo wysoka gęstość (xhdpi ~ 320dpi) (Te wartości dpi są przybliżeniami, ponieważ niestandardowe urządzenia będą miały różne wartości dpi)

To, co (jeśli jesteś projektantem) musisz wiedzieć, to to, że Android w zasadzie wybiera spośród 4 obrazów do wyświetlenia, w zależności od urządzenia. Więc zasadniczo musisz zaprojektować 4 różne obrazy (chociaż więcej można opracować dla różnych formatów, takich jak panoramiczny, tryb pionowy/krajobrazowy itp.).

Mając to na uwadze, wiedz jedno: jeśli nie zaprojektujesz ekranu dla każdej pojedynczej rozdzielczości używanej w systemie Android, twój obraz będzie rozciągał się do rozmiaru ekranu. I jeśli twój obraz nie jest w zasadzie gradientem lub rozmyciem, otrzymasz niepożądane zniekształcenia z rozciąganiem. Masz więc zasadniczo dwie opcje: Utwórz obraz dla każdego ekranu połączenie rozmiaru/gęstości lub utworzenie czterech 9-łat obrazów.

Najtrudniejszym rozwiązaniem jest zaprojektowanie innego ekranu powitalnego dla każdej pojedynczej rozdzielczości. Możesz zacząć od uchwał w tabeli na końcu tej strony (jest ich więcej. Przykład: 960 x 720 nie jest tam wymieniony). Zakładając, że na obrazie są małe szczegóły, takie jak mały tekst, musisz zaprojektować więcej niż jeden ekran dla każdej rozdzielczości. Na przykład obraz 480x800 wyświetlany na nośniku ekran może wyglądać dobrze, ale na mniejszym ekranie (o większej gęstości/dpi) logo może stać się zbyt małe lub niektóre teksty mogą stać się nieczytelne.

9-patch image

Innym rozwiązaniem jest stworzenie 9-patchowego obrazu . Jest to zasadniczo przezroczysta ramka o rozmiarze 1 piksela wokół obrazu, a rysując czarne piksele w górnym I lewym obszarze tej ramki, możesz określić, które części obrazu będą mogły się rozciągać. Nie będę wdawał się w szczegóły jak 9-patch images praca, ale krótko mówiąc, piksele, które wyrównują się do oznaczeń w górnym I lewym obszarze, są pikselami, które zostaną powtórzone w celu rozciągnięcia obrazu.

Kilka podstawowych zasad

  1. możesz tworzyć te obrazy w Photoshopie (lub dowolnym oprogramowaniu do edycji obrazów, które może dokładnie tworzyć przezroczyste pngs).
  2. 1-pikselowa ramka musi być w pełni przezroczysta.
  3. 1-pikselowa przezroczysta ramka musi być wokół Twojego obrazu, a nie tylko u góry i po lewej stronie.
  4. you can only draw czarny (#000000) pikseli w tym obszarze.
  5. górna i lewa krawędź (definiująca rozciąganie obrazu) może mieć tylko jedną kropkę (1 x 1 x 1 x), dwie kropki (1 x 1 x) lub jedną ciągłą linię (szerokość x 1 x lub 1 x wysokość).
  6. jeśli zdecydujesz się użyć 2 kropek, obraz zostanie proporcjonalnie powiększony (więc każda kropka będzie rozszerzać się na zmianę, aż do osiągnięcia ostatecznej szerokości/wysokości)
  7. ramka 1px musi być oprócz zamierzonych wymiarów pliku bazowego. So a 100x100 9-patch obraz musi mieć 102x102 (100x100 +1px na górze, dole, lewej i prawej)
  8. obrazy z 9 łatek muszą kończyć się znakiem *.9.png

Możesz więc umieścić 1 kropkę po obu stronach logo (w górnej ramce) oraz 1 kropkę nad i pod nim (na lewej ramce), a te zaznaczone wiersze i kolumny będą jedynymi pikselami do rozciągnięcia.

Przykład

Oto 9-patchowy obraz, 102x102px (ostateczny rozmiar 100x100, do celów aplikacji):

9-patch image, 102x102px

Oto 200% zoom o tym samym obrazku:

ten sam obraz, powiększony 2x dla jasności

Zwróć uwagę na znaki 1px na górze i po lewej stronie mówiące, które wiersze / kolumny będą się rozszerzać.

Oto jak wyglądałby Ten obraz w 100x100 wewnątrz aplikacji:

100x100

A oto co by było gdyby rozbudowano go do 460x140:

460x140

Ostatnia rzecz do rozważenia. Obrazy te mogą wyglądać dobrze na ekranie monitora i większości telefonów komórkowych, ale jeśli urządzenie ma bardzo wysoką gęstość obrazu (dpi), obraz również wyglądałby małe. Prawdopodobnie nadal czytelny, ale na tablecie O Rozdzielczości 1920x1200 obraz pojawiałby się jako bardzo mały kwadrat pośrodku. Więc jakie jest rozwiązanie? Zaprojektuj 4 różne 9-łatkowe obrazy wyrzutni, każdy dla innego zestawu gęstości. Aby upewnić się, że nie nastąpi kurczenie, należy zaprojektować najniższą wspólną rozdzielczość dla każdej kategorii gęstości. Kurczenie się jest tutaj niepożądane, ponieważ 9-patch zapewnia tylko rozciąganie, więc w procesie kurczenia mały tekst i inne elementy mogą stracić czytelność.

Oto lista najmniejszych, najczęściej spotykanych rozdzielczości dla każdej kategorii gęstości:

  • xlarge( xhdpi): 640x960
  • Duży (hdpi): 480x800
  • medium (mdpi): 320x480
  • mały( ldpi): 240x320

Zaprojektuj więc cztery ekrany powitalne w powyższych rozdzielczościach, rozwiń obrazy, umieszczając przezroczystą ramkę 1px wokół płótna i zaznacz, które wiersze/kolumny będą rozciągliwe. Należy pamiętać, że te obrazy będą używane dla dowolnych urządzenie w kategorii gęstości, więc twój obraz ldpi (240 x 320) może być rozciągnięty do 1024x600 na bardzo dużym tablecie o małej gęstości obrazu (~120 dpi). Tak więc 9-patch jest najlepszym rozwiązaniem do rozciągania, o ile nie chcesz mieć zdjęcia lub skomplikowanej grafiki na ekranie powitalnym (pamiętaj o tych ograniczeniach podczas tworzenia projektu).

Ponownie, jedynym sposobem, aby to rozciąganie nie miało miejsca, jest zaprojektowanie jednego ekranu każdej rozdzielczości (lub jednego dla każdej kombinacji rozdzielczość-gęstość, jeśli chcesz uniknąć zbyt małych/dużych obrazów na urządzeniach o wysokiej/niskiej gęstości) lub powiedzieć obrazowi, aby nie rozciągał się i aby kolor tła pojawiał się wszędzie tam, gdzie wystąpi rozciąganie (Pamiętaj również, że określony kolor renderowany przez silnik Androida prawdopodobnie będzie wyglądał inaczej niż ten sam konkretny kolor renderowany przez photoshop, ze względu na profile kolorów).

Mam nadzieję, że to ma jakiś sens. Powodzenia!
 384
Author: Lucas Cerro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-28 21:46:18

TRYB PORTRETOWY

MDPI to 320x480 dp = 320x480px (1x)

LDPI wynosi 0,75 x MDPI = 240x360px

HDPI to 1,5 x MDPI = 480X720PX

XHDPI to 2 x MDPI = 640X960PX

XXHDPI to 3 x MDPI = 960x1440px

XXXHDPI wynosi 4 x MDPI = 1280x1920px

TRYB KRAJOBRAZOWY

MDPI wynosi 480x320 dp = 480x320px (1x)

LDPI wynosi 0,75 x MDPI = 360x240px

HDPI to 1.5 x MDPI = 720x480px

XHDPI to 2 x MDPI = 960x640px

XXHDPI jest 3 x MDPI = 1440x960px

XXXHDPI wynosi 4 x MDPI = 1920x1280px

 100
Author: Ajmal Salim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-11 14:46:57

Portret

LDPI: 200x320px

MDPI: 320x480px

HDPI: 480X800PX

XHDPI: 720px1280px

Krajobraz

LDPI: 320x200px

MDPI: 480x320px

HDPI: 800x480px

XHDPI: 1280x720px

 27
Author: JRE.exe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-23 02:51:22

Szukałem najlepszej i najprostszej odpowiedzi, aby zrobić obraz 9-patch. Teraz, aby 9 patch obraz jest najprostszym zadaniem.

Od https://romannurik.github.io/AndroidAssetStudio/index.html możesz zrobić 9-patchowy obraz dla wszystkich rozdzielczości-XHDPI, HDPI, MDPI,LDPI jednym kliknięciem.

 15
Author: Owidat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-18 02:12:51

Używanie PNG nie jest dobrym pomysłem. W rzeczywistości jest to kosztowne, jeśli chodzi o wydajność. Możesz użyć rysowalnych plików XML, na przykład, Tło Facebook .

To pomoże Ci płynnie i przyspieszyć wydajność, a do wykorzystania logo .9 patch images.

 11
Author: Nishant Shah,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-28 18:48:52
Density buckets

LDPI    120dpi    .75x
MDPI    160dpi    1x
HDPI    240dpi    1.5x
XHDPI   320dpi    2x
XXHDPI  480dpi    3x
XXXHDPI 640dpi    4x

px / dp = dpi / 160 dpi
 9
Author: Zero,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-11 14:36:41

W moim przypadku użyłem listy drawable w stylu.xml. Z listą warstw można rysować, wystarczy jeden png dla wszystkich rozmiarów ekranu.

<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowBackground">@drawable/flash_screen</item>
    <item name="android:windowTranslucentStatus" tools:ignore="NewApi">true</item>
</style>

I flash_screen.xml w folderze drawable.

<?xml version="1.0" encoding="utf-8"?>
 <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@android:color/white"></item>
<item>
    <bitmap android:src="@drawable/background_noizi" android:gravity="center"></bitmap>
</item>

"background_noizi" to png w folderze drawable. Mam nadzieję, że to pomoże

 3
Author: user3295573,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-27 10:51:54

Jakiś czas temu utworzyłem plik Excela o obsługiwanych wymiarach
Mam nadzieję, że to będzie pomocne dla kogoś

Szczerze mówiąc straciłem pomysł, ale odnosi się do innej funkcji ekranu jako rozmiar (nie tylko gęstość)
https://developer.android.com/guide/practices/screens_support.html
Proszę mnie poinformować, jeśli są jakieś błędy

Link1: wymiary.xlsx

Link2: wymiary.xlsx

 2
Author: V. Kalyuzhnyu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-04 03:47:46

** Jeśli szukasz szczegółów ekranu dla wszystkich głównych urządzeń * *

Przejdź do material.io

 2
Author: WonderKid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-29 06:57:21