Jaka jest różnica między „px”, „dip”, „dp” i „sp”?


5813

Jaka jest różnica między jednostkami miary dla Androida?

  • px
  • stoczek
  • dp
  • sp. z oo

65
jest to pełna różnica między px, dip, dp i sp w Androidzie [ developer.android.com/guide/topics/resources/…
NagarjunaReddy

20
Ten fajny konwerter pokazuje to najlepiej , moim zdaniem. Jest to również bardzo przydatne do eksportowania duszków z Photoshopa lub projektowania układu dla wymiaru fizycznego.
Paul Lammertsma

9
nowy opis w Google Design Units i pomiarach
Arnav M.


1
Materiał wzór z pikseli gęstości material.io/design/layout/...
Shomu

Odpowiedzi:


5770

Z dokumentacji dla programistów Androida :

  1. px
    Pixels - odpowiada rzeczywistej liczbie pikseli na ekranie.

  2. w
    calach - w oparciu o fizyczny rozmiar ekranu.
    1 cal = 2,54 centymetra

  3. mm
    Milimetry - w oparciu o fizyczny rozmiar ekranu.

  4. pt
    Punkty - 1/72 cala w oparciu o fizyczny rozmiar ekranu.

  5. dp lub dip Piksele niezależne od
    gęstości - abstrakcyjna jednostka oparta na fizycznej gęstości ekranu. Jednostki te odnoszą się do ekranu o rozdzielczości 160 dpi, więc jeden dp to jeden piksel na ekranie o rozdzielczości 160 dpi. Stosunek dp-do piksela zmienia się wraz z gęstością ekranu, ale niekoniecznie w proporcji bezpośredniej. Uwaga: Kompilator akceptuje zarówno „dip”, jak i „dp”, chociaż „dp” jest bardziej spójny z „sp”.

  6. sp Piksele niezależne od
    skali - działa podobnie do jednostki dp, ale jest również skalowane według preferencji użytkownika dotyczących rozmiaru czcionki. Zaleca się używanie tego urządzenia podczas określania rozmiarów czcionek, aby były one dostosowane zarówno do gęstości ekranu, jak i preferencji użytkownika.

Od zrozumienia niezależności gęstości w Androidzie :

+----------------+----------------+---------------+-------------------------------+
| Density Bucket | Screen Density | Physical Size | Pixel Size                    | 
+----------------+----------------+---------------+-------------------------------+
| ldpi           | 120 dpi        | 0.5 x 0.5 in  | 0.5 in * 120 dpi = 60x60 px   | 
+----------------+----------------+---------------+-------------------------------+
| mdpi           | 160 dpi        | 0.5 x 0.5 in  | 0.5 in * 160 dpi = 80x80 px   | 
+----------------+----------------+---------------+-------------------------------+
| hdpi           | 240 dpi        | 0.5 x 0.5 in  | 0.5 in * 240 dpi = 120x120 px | 
+----------------+----------------+---------------+-------------------------------+
| xhdpi          | 320 dpi        | 0.5 x 0.5 in  | 0.5 in * 320 dpi = 160x160 px | 
+----------------+----------------+---------------+-------------------------------+
| xxhdpi         | 480 dpi        | 0.5 x 0.5 in  | 0.5 in * 480 dpi = 240x240 px | 
+----------------+----------------+---------------+-------------------------------+
| xxxhdpi        | 640 dpi        | 0.5 x 0.5 in  | 0.5 in * 640 dpi = 320x320 px | 
+----------------+----------------+---------------+-------------------------------+
+---------+-------------+---------------+-------------+--------------------+
| Unit    | Description | Units Per     | Density     | Same Physical Size | 
|         |             | Physical Inch | Independent | On Every Screen    | 
+---------+-------------+---------------+-------------+--------------------+
| px      | Pixels      | Varies        | No          | No                 | 
+---------+-------------+---------------+-------------+--------------------+
| in      | Inches      | 1             | Yes         | Yes                | 
+---------+-------------+---------------+-------------+--------------------+
| mm      | Millimeters | 25.4          | Yes         | Yes                | 
+---------+-------------+---------------+-------------+--------------------+
| pt      | Points      | 72            | Yes         | Yes                | 
+---------+-------------+---------------+-------------+--------------------+
| dp      | Density     | ~160          | Yes         | No                 | 
|         | Independent |               |             |                    | 
|         | Pixels      |               |             |                    | 
+---------+-------------+---------------+-------------+--------------------+
| sp      | Scale       | ~160          | Yes         | No                 | 
|         | Independent |               |             |                    | 
|         | Pixels      |               |             |                    | 
+---------+-------------+---------------+-------------+--------------------+

Więcej informacji można również znaleźć w Dokumentacji projektowej Google .


17
mimo że powinny być tym samym, mam wiele problemów z dp, podczas gdy wszystko działa dobrze z dipem
DallaRosa

247
Jedna uwaga na temat db / sp, która nie jest całkowicie oczywista: Skalowanie, które następuje dla nich, nie zależy od rzeczywistej gęstości urządzeń (dpi), ale od tego, do jakiego „przedziału” gęstości należy: dostępne przedziały to: 120,160,240,320. Może to powodować pewne problemy z obsługą ekranów, które są znacząco różne, ale takie same są spakowane.
Fraggle,

15
Zauważ, że w dokumentacji nie ma już mowy o „zanurzeniu”, tylko „dp”, chociaż kompilator nadal wydaje się akceptować „zanurzenie”.
Adam Rosenfield

15
@android_developer (5 komentarzy powyżej) dpma nie mieć dokładnie taką samą długość fizyczną. (Chociaż jest blisko.) Zobacz komentarz @ Fraggle na temat wiaderka. Oznacza to, że 48dp będzie wynosić około 8 mm (0,3 cala), ale może różnić się do 11 mm.
intrepidis

11
Powodem tego jest to, że programiści mogą testować swoje aplikacje na kilku urządzeniach o różnych gęstościach i mieć pewność, że układy będą wyglądały tak samo na wielu urządzeniach. Więc nawet jeśli fizyczny rozmiar przycisków itp. Zmieni się nieco, ogólny wygląd działania będzie taki sam.
intrepidis,

684

Prawie wszystko na ten temat i jak osiągnąć najlepszą obsługę wielu ekranów o różnych rozmiarach i gęstościach jest bardzo dobrze udokumentowane tutaj:

Rozmiar ekranu
Rzeczywisty rozmiar fizyczny, mierzony jako przekątna ekranu. Dla uproszczenia system Android grupuje wszystkie rzeczywiste rozmiary ekranu na cztery ogólne rozmiary: mały, normalny, duży i bardzo duży.

Gęstość ekranu
Liczba pikseli w fizycznym obszarze ekranu; zwykle określane jako dpi (kropki na cal). Na przykład ekran o „niskiej” gęstości ma mniej pikseli w danym obszarze fizycznym, w porównaniu do ekranu o „normalnej” lub „wysokiej” gęstości. Dla uproszczenia system Android grupuje wszystkie rzeczywiste gęstości ekranu na sześć ogólnych gęstości: niska, średnia, wysoka, bardzo wysoka, bardzo wysoka i bardzo wysoka.

Orientacja
Orientacja ekranu z punktu widzenia użytkownika. Jest to krajobraz lub portret, co oznacza, że ​​proporcje ekranu są odpowiednio szerokie lub wysokie. Należy pamiętać, że nie tylko różne urządzenia domyślnie działają w różnych orientacjach, ale orientacja może się zmienić w czasie wykonywania, gdy użytkownik obraca urządzenie.

Rozdzielczość
Całkowita liczba fizycznych pikseli na ekranie. Podczas dodawania obsługi wielu ekranów aplikacje nie działają bezpośrednio z rozdzielczością; aplikacje powinny dotyczyć wyłącznie rozmiaru i gęstości ekranu, określonych przez ogólne grupy wielkości i gęstości.

Piksel niezależny od gęstości (dp)
Wirtualna jednostka pikseli, której należy użyć podczas definiowania układu interfejsu użytkownika, aby wyrazić wymiary lub pozycję układu w sposób niezależny od gęstości. Piksel niezależny od gęstości odpowiada jednemu pikselowi fizycznemu na ekranie o rozdzielczości 160 dpi, który jest podstawową gęstością przyjętą przez system dla ekranu o „średniej” gęstości. W czasie wykonywania system w przejrzysty sposób obsługuje dowolne skalowanie jednostek dp, zależnie od rzeczywistej gęstości używanego ekranu. Konwersja jednostek DP pikselach jest prosta px = dp * (dpi / 160). Na przykład na ekranie o rozdzielczości 240 dpi 1 dp to 1,5 piksela fizycznego. Podczas definiowania interfejsu użytkownika aplikacji należy zawsze używać jednostek dp, aby zapewnić prawidłowe wyświetlanie interfejsu użytkownika na ekranach o różnych gęstościach.

Jeśli poważnie myślisz o opracowaniu aplikacji na Androida dla więcej niż jednego typu urządzenia, powinieneś przeczytać dokument dotyczący programowania rozwoju przynajmniej raz. Ponadto zawsze dobrze jest znać rzeczywistą liczbę aktywnych urządzeń, które mają określoną konfigurację ekranu.


41
Więc jeśli użyjesz dp dla przycisku i sp dla rozmiaru czcionki tekstu przycisku, co stanie się, gdy użytkownik zacznie skalować? Tekst zostanie powiększony, ale czy przycisk to dostosuje również poprzez powiększenie?
Wytze

11
@Wytze, nie. Dla rzeczy, w których dopasowanie tekstu może być problemem, użyłbym tylko dipa, aby rzeczy się nie przepełniły.
eski

12
@Wytze A ja, przeciwnie, używam sp zarówno dla tekstu, jak i wszystkiego, co zawiera. Na przykład, jeśli mam przycisk ze stałym rozmiarem i tekstem w środku, przypisałbym rozmiar przycisku w sp, aby skalował się również w razie potrzeby. W przeciwnym razie użytkownik będzie zirytowany, że zwiększył rozmiar tekstu i nie zwiększył się. Oczywiście układ powinien być wystarczająco elastyczny, aby na to pozwolić.
Malcolm

2
Jeśli projektanci nie pozostawiają miejsca na skalowanie elementów tekstowych zgodnie z rozmiarem sp, jedną z opcji jest przełączenie na dowolny układ, którego użyjesz dla węższego urządzenia, a następnie skalowanie wszystkiego równomiernie za pomocą (DisplayMetrics.scaledDensity / DisplayMetrics. gęstość).
John Mellor,

@Sam brak wolnego miejsca spowoduje również problemy podczas i18n
zmniejszając aktywność

346

Omówię dokładniej, w jaki sposób dp konwertuje dp na px:

  • Jeśli działa na urządzeniu mdpi, 150 x 150 pxobraz zajmie miejsce 150 * 150 dpna ekranie.
  • Jeśli działa na urządzeniu HDpi, 150 x 150 pxobraz zajmie miejsce 100 * 100 dpna ekranie.
  • Jeśli działa na urządzeniu xhdpi, 150x150 pxobraz zajmie miejsce 75 * 75 dpna ekranie.

Odwrotnie: powiedz, że chcesz dodać obraz do swojej aplikacji i potrzebujesz go do wypełnienia 100 * 100 dpformantu. Musisz utworzyć obrazy o różnych rozmiarach dla obsługiwanych rozmiarów ekranu:

  • 100 * 100 px obraz dla mdpi
  • 150 * 150 px obraz do hdpi
  • 200 * 200 px obraz dla xhdpi

2
Jak obliczamy piksele dla hdpi, ldpi, mdpi itp. Słyszałem, że używamy tej formuły..px = dp * (dpi / 160); Czy możesz wyjaśnić mi tę formułę PLZ?
Rakesh patanga

@Rakeshpatanga Przy gęstości 160 dpi, 1 px = 1 dp (fizyczny piksel i abstrakcja dp są takie same). Oznacza to, że dla pojedynczego dp mamy (1) * (160/160) = 1 lub dokładnie 1 px. Przy wyższej gęstości 320 dpi pojedynczy dp wynosi (1) * (320/160) = 2 piksele, a dwa dp to (2) * (320/160) = 4 piksele.
samis

Ustaw je w jednej linii, aby zobaczyć: | 1dp |, | ___ | ___ | 160, | _ | | _ | _ | _ | 320 (wstaw podział wiersza po przecinkach). | _ | = 1 p i x el.
samis

re „Musisz utworzyć obrazy o różnych rozmiarach dla obsługiwanych rozmiarów ekranu:” To zależy. W przypadku małych obrazów o wysokim kontraście , np. Ikon, rozsądnie jest utworzyć co najmniej najmniejszy rozmiar (aby mieć pewność, że będzie wyraźny) oraz dość duży rozmiar (aby duże wersje nie wyglądały na rozmyte). Ale nawet w przypadku ikon można zezwolić na skalowanie jednego obrazu w różnych rozmiarach i przy większej gęstości. W przypadku zdjęć wystarczy określić obszar wyświetlania, który ma być wypełniony, i polegać na skalowaniu urządzenia.
ToolmakerSteve

285

px - Piksele - punkt na skalę odpowiada rzeczywistej liczbie pikseli na ekranie.

i - Cale - w oparciu o fizyczny rozmiar ekranu.

mm - Milimetry - w oparciu o fizyczny rozmiar ekranu.

pt - Punkty - 1/72 cala w oparciu o fizyczny rozmiar ekranu.

dp - Piksele niezależne od gęstości - abstrakcyjna jednostka oparta na fizycznej gęstości ekranu. Jednostki te odnoszą się do ekranu o rozdzielczości 160 dpi, więc dpjeden piksel na ekranie o rozdzielczości 160 dpi. Stosunek dp-do piksela zmienia się wraz z gęstością ekranu, ale niekoniecznie w proporcji bezpośredniej. Uwaga: Kompilator akceptuje zarówno dipi dp, choć dpjest bardziej zgodne z sp.

sp - Piksele niezależne od skali - jest to jak dpjednostka, ale jest również skalowane według preferencji użytkownika dotyczących rozmiaru czcionki. Zaleca się korzystanie z tego urządzenia podczas określania rozmiarów czcionek, aby dopasować je zarówno do gęstości ekranu, jak i preferencji użytkownika.

Weźmy przykład dwóch ekranów, które są tego samego rozmiaru, ale jeden ma gęstość ekranu 160 dpi (kropki na cal, tj. Piksele na cal), a drugi to 240 dpi.

                          Lower resolution screen     Higher resolution, same size
Physical Width                      1.5 inches                        1.5 inches
Dots Per Inch (“dpi”)               160                               240
Pixels (=width*dpi)                 240                               360
Density (factor of baseline 160)    1.0                               1.5

Density-independent pixels          240                               240
(“dip or dp or dps”)

Scale-independent pixels 
 (“sip or sp”)                  Depends on user font size settings    same

233

Ponadto należy dobrze zrozumieć następujące pojęcia:

Rozmiar ekranu:

Rzeczywisty rozmiar fizyczny, mierzony jako przekątna ekranu. Dla uproszczenia system Android grupuje wszystkie rzeczywiste rozmiary ekranu na cztery ogólne rozmiary: mały, normalny, duży i bardzo duży.

Gęstość ekranu:

Ilość pikseli w fizycznym obszarze ekranu; zwykle określane jako dpi (kropki na cal). Na przykład ekran o „niskiej” gęstości ma mniej pikseli w danym obszarze fizycznym, w porównaniu do ekranu o „normalnej” lub „wysokiej” gęstości. Dla uproszczenia system Android grupuje wszystkie rzeczywiste gęstości ekranu na cztery ogólne gęstości: niska, średnia, wysoka i bardzo wysoka.

Orientacja:

Orientacja ekranu z punktu widzenia użytkownika. Jest to krajobraz lub portret, co oznacza, że ​​proporcje ekranu są odpowiednio szerokie lub wysokie. Należy pamiętać, że nie tylko różne urządzenia domyślnie działają w różnych orientacjach, ale orientacja może się zmienić w czasie wykonywania, gdy użytkownik obraca urządzenie.

Rozkład:

Łączna liczba fizycznych pikseli na ekranie. Podczas dodawania obsługi wielu ekranów aplikacje nie działają bezpośrednio z rozdzielczością; aplikacje powinny dotyczyć wyłącznie rozmiaru i gęstości ekranu, określonych przez ogólne grupy wielkości i gęstości.

Piksel niezależny od gęstości (dp):

Wirtualna jednostka pikseli, której należy używać podczas definiowania układu interfejsu użytkownika, w celu wyrażenia wymiarów lub położenia układu w sposób niezależny od gęstości. Piksel niezależny od gęstości odpowiada jednemu pikselowi fizycznemu na ekranie o rozdzielczości 160 dpi, który jest podstawową gęstością przyjętą przez system dla ekranu o „średniej” gęstości. W czasie wykonywania system w przejrzysty sposób obsługuje dowolne skalowanie jednostek dp, zależnie od rzeczywistej gęstości używanego ekranu. Konwersja jednostek dp na piksele ekranowe jest prosta: px = dp * (dpi / 160). Na przykład na ekranie o rozdzielczości 240 dpi 1 dp to 1,5 piksela fizycznego. Podczas definiowania interfejsu użytkownika aplikacji należy zawsze używać jednostek dp, aby zapewnić prawidłowe wyświetlanie interfejsu użytkownika na ekranach o różnych gęstościach.

Odniesienie: strona dla programistów Androida


Czy to oznacza, że ​​wszystko, co zaprojektujesz za pomocą jednostek dp, zawsze będzie zajmowało ten sam% ekranu, niezależnie od gęstości pikseli urządzenia? Zakładając identyczne proporcje obrazu.
DBIT,

198

dpjest dip. Używaj go do wszystkiego (margines, wypełnienie itp.).

Użyj tylko spdla {text-size}.


Aby uzyskać ten sam rozmiar przy różnych gęstościach ekranu, Android tłumaczy te jednostki na piksele w czasie wykonywania, więc nie ma trudnej matematyki.


Zobacz różnicę pomiędzy px, dporaz spw różnych rozmiarach ekranu.

Wpisz opis zdjęcia tutaj

Źródło: Programowanie na Androida: Przewodnik po The Big Nerd Ranch



141

Definicje

px lub kropka to piksel na ekranie fizycznym.

dpi to piksele na cal na ekranie fizycznym i reprezentują gęstość wyświetlacza.

Android nadaje nazwy aliasów kilku gęstościom

  • ldpi (niski) ~ 120dpi
  • mdpi (średni) ~ 160dpi
  • hdpi (wysoka) ~ 240dpi
    • większość urządzeń w 2015 roku jest tutaj
  • xhdpi (bardzo wysoka) ~ 320dpi
    • Apple iPhone 4/5/6, Nexus 4
  • xxhdpi (extra-extra-high) ~ 480dpi
    • Nexus 5
  • xxxhdpi (extra-extra-extra-high) ~ 640dpi

dip lub dppikselami niezależnymi od gęstości , tzn. odpowiadają większej lub mniejszej liczbie pikseli w zależności od gęstości fizycznej.

  • 1dp = 1px na mdpi

wprowadź opis zdjęcia tutaj

sp lub sip to piksel niezależny od skali . Są skalowane, gdy opcja Duży tekst jest włączona w Settings>Accessibility

  • 1sp = 1dp
  • 1sp = 1,2dp z dostępnością Duży tekst

Czego używać?

Użyj sp dla rozmiaru tekstu.

Użyj dp do wszystkiego innego.


128

Źródło 1

Źródło 2

Źródło 3 : (dane ze źródła 3 podano poniżej)

Są to wartości wymiarów zdefiniowane w XML. Wymiar jest określony liczbą, po której następuje jednostka miary. Na przykład: 10 pikseli, 2 cale, 5sp. Android obsługuje następujące jednostki miary:

dp

Piksele niezależne od gęstości - jednostka abstrakcyjna oparta na fizycznej gęstości ekranu. Jednostki te odnoszą się do ekranu o rozdzielczości 160 dpi (punktów na cal), na którym 1dp jest z grubsza równy 1px. Podczas pracy na ekranie o większej gęstości liczba pikseli użytych do narysowania 1dp jest zwiększana o współczynnik odpowiedni dla rozdzielczości ekranu. Podobnie na ekranie o niższej gęstości liczba pikseli używanych do 1dp jest zmniejszana. Stosunek dp-do piksela zmienia się wraz z gęstością ekranu, ale niekoniecznie w proporcji bezpośredniej. Używanie jednostek dp (zamiast jednostek px) jest prostym rozwiązaniem, aby wymiary widoku w układzie były odpowiednio zmieniane dla różnych gęstości ekranu. Innymi słowy, zapewnia spójność rzeczywistych rozmiarów elementów interfejsu użytkownika na różnych urządzeniach.

sp. z oo

Piksele niezależne od skali - działa podobnie do jednostki dp, ale jest również skalowane według preferencji użytkownika dotyczących rozmiaru czcionki. Zaleca się korzystanie z tego urządzenia podczas określania rozmiarów czcionek, aby dopasować je zarówno do gęstości ekranu, jak i preferencji użytkownika.

pt

Punkty - 1/72 cala w oparciu o fizyczny rozmiar ekranu.

px

Piksele - odpowiada rzeczywistym pikselom na ekranie. Ta jednostka miary nie jest zalecana, ponieważ rzeczywista reprezentacja może się różnić w zależności od urządzenia; każde urządzenie może mieć inną liczbę pikseli na cal i może mieć większą lub mniejszą liczbę pikseli dostępnych na ekranie.

mm

Milimetry - w oparciu o fizyczny rozmiar ekranu.

w

Cale - w oparciu o fizyczny rozmiar ekranu.

Uwaga: Wymiar to prosty zasób, do którego można się odwoływać, używając wartości podanej w atrybucie name (a nie nazwie pliku XML). Jako takie, możesz łączyć zasoby wymiarów z innymi prostymi zasobami w jednym pliku XML, w ramach jednego elementu.


9
Ponadto: jaka jest wartość dodana tej odpowiedzi? Wydaje się, że nic nie zostało wspomniane w innych odpowiedziach.
laalto

118

Zasadniczo jedynym momentem, w którym obowiązuje piksel, jest jeden piksel, a to znaczy, jeśli chcesz dokładnie jeden piksel na ekranie, jak w przypadku dzielnika:

Przy> 160 dpi możesz uzyskać 2-3 piksele,

Przy> 120 dpi zaokrągla do 0.


getDimensionPixelOffset zaokrągla w dół, getDimensionPixelSize zaokrągla w górę.
Eugen Pechanec

101

px

Piksele - odpowiada rzeczywistym pikselom na ekranie.

dp lub dip

Piksele niezależne od gęstości - abstrakcyjna jednostka oparta na fizycznej gęstości ekranu. Jednostki te odnoszą się do ekranu o rozdzielczości 160 dpi, więc jeden dp to jeden piksel na ekranie o rozdzielczości 160 dpi.

Zastosowanie dp:

Niezależność od gęstości - Twoja aplikacja osiąga „niezależność od gęstości”, gdy zachowuje fizyczny rozmiar (z punktu widzenia użytkownika) elementów interfejsu użytkownika, gdy są wyświetlane na ekranach o różnych gęstościach. (tj.) Obraz powinien wyglądać tego samego rozmiaru (nie powiększony ani pomniejszony) na różnych typach ekranów.

sp. z oo

Piksele niezależne od skali - jest to jak jednostka dp, ale jest również skalowane według preferencji użytkownika dotyczących rozmiaru czcionki.

http://developer.android.com/guide/topics/resources/more-resources.html#Dimension


97

Gdzie stosować co i związek między px i dp?

Piksel niezależny od gęstości (dp)

Wirtualna jednostka pikseli, której należy używać podczas definiowania układu interfejsu użytkownika, w celu wyrażenia wymiarów lub położenia układu w sposób niezależny od gęstości. Jak opisano powyżej, piksel niezależny od gęstości jest równoważny jednemu pikselowi fizycznemu na ekranie o rozdzielczości 160 dpi, który jest podstawową gęstością przyjętą przez system dla ekranu o „średniej” gęstości. W czasie wykonywania system w przejrzysty sposób obsługuje dowolne skalowanie jednostek dp, zależnie od rzeczywistej gęstości używanego ekranu. Konwersja jednostek dp na piksele ekranowe jest prosta:

px = dp * (dpi / 160).

Na przykład na ekranie o rozdzielczości 240 dpi 1 dp to 1,5 piksela fizycznego. Podczas definiowania interfejsu użytkownika aplikacji należy zawsze używać jednostek dp, aby zapewnić prawidłowe wyświetlanie interfejsu użytkownika na ekranach o różnych gęstościach.

Zrozumienie piksela do dp i odwrotnie jest bardzo istotne (szczególnie w celu podania dokładnych wartości dp zespołowi kreatywnemu)

dp = px * 160 / dpi

MDPI = 160 dpi || Therefore, on MDPI 1 px = 1 dp
For example, if you want to convert 20 pixel to dp, use the above formula,
dp = 20 * 160 / 160 = 20.
So, 20 pixel = 20 dp.

HDPI = 240 dpi - So, on HDPI 1.5 px = 1 dp
XHDPI = 320 dpi - So, on XHDPI 2 px = 1 dp
XXHDPI = 480 dpi - So, on XXHDPI 3 px = 1 dp

For example, let us consider Nexus 4.
If 24 pixels to be converted to dp and if it is a Nexus 4 screen, developers can
convert it to dp easily by the following calculation :
dp = 24 * 160 / 320 = 12 dp
Screen dimension:
768 x 1280 pixel resolution (320 ppi or 320dpi)
Optional (screen size):
 4.7" diagonal
  • Staraj się uzyskać wszystkie wartości pikseli w parzystych liczbach od zespołu kreatywnego. W przeciwnym razie nastąpi utrata precyzji podczas mnożenia przez 0,5.

px

Wyjaśniono to powyżej. Staraj się unikać w plikach układu. Ale są przypadki, w których wymagany jest px. na przykład linia podziału ListView. px jest tutaj lepszy, ponieważ podaje linię jednopikselową jako dzielnik dla wszystkich rozdzielczości ekranu.

sp. z oo

Użyj sp dla rozmiarów czcionek. Wtedy zmieni się tylko czcionka w aplikacji, a rozmiar czcionki urządzenia zmieni się (to znaczy Wyświetl -> Czcionki na urządzeniu). Jeśli chcesz zachować czcionkę o stałej wielkości wewnątrz aplikacji, możesz nadać jej wymiar w dp. W takim przypadku nigdy się to nie zmieni. Programiści mogą otrzymać takie wymaganie dla niektórych określonych ekranów, dlatego programiści mogą używać dp zamiast sp. We wszystkich innych przypadkach zaleca się sp.


89

Możesz zobaczyć różnicę pomiędzy pxi dpna poniższym obrazku, a także możesz stwierdzić, że pxi dpnie mogą zagwarantować takich samych fizycznych rozmiarów na różnych ekranach.

wprowadź opis zdjęcia tutaj


3
@EnesBattal, myślę, że ponieważ dp nie jest ostrym rozmiarem fizycznym, jest to wartość przybliżona. Cytując z CapTech: „dp - jest to jednostka niezależna od gęstości, jednak fizyczny rozmiar pojedynczego„ dp ”jest tylko w przybliżeniu taki sam na każdej gęstości ekranu. Istnieje około 160„ dp ”na cal. Współczynnik skalowania, w zależności od na kubku gęstości urządzenia, służy do konwersji „dp” na liczbę pikseli przy 160 dpi. Liczba pikseli, na którą przekłada się pojedynczy „dp”, zmienia się w zależności od piksela na gęstości ekranu i kubełka gęstości, na jaki spada urządzenie w."
Zephyr

3
@RuchirBaronia, myślę, że DP lub DIP wciąż są w apku, ponieważ apk nie wie, z jakim rodzajem gęstości ekranu będzie działał, więc należy zachować niezależność urządzenia.
Zephyr

79

Wszystko związane z rozmiarem tekstu i wyglądu musi zawierać splub pt. Podczas gdy wszystko związane z rozmiarem formantów, układów itp. Musi być używane z dp.

Możesz używać obu dpi dipna jego miejscach.


69

Używałbym tylko dp.

Dużo mówi się o używaniu „sp” do rozmiarów czcionek i choć doceniam tę kwestię, nie sądzę, aby było to właściwe z punktu widzenia projektowania. Możesz skończyć z zepsuciem swojego projektu, jeśli użytkownik ma trochę chybionego wyboru rozmiaru czcionki, a on ostatecznie obwinia aplikację , a nie własne wybory życiowe.

Ponadto, jeśli weźmiesz aplikację sp-font na tablecie 160 dpi, przekonasz się, że wszystko skaluje się ... ale twoja czcionka, która będzie wyglądać malutko w porównaniu. To nie jest dobry wygląd.

Chociaż pomysł na czcionki „sp” ma dobre serce, jest to kiepski pomysł. Trzymaj się dp na wszystko.


1
Wiesz, że zastosowany współczynnik skali czcionki spjest czynnikiem, prawda? Wpłynie to dprównież na wszystko, co wpływa sp. To powiedziawszy, nadal zaleca się określanie rozmiarów czcionek za pomocą dpzamiast, spjeśli układ jest bardzo ciasny, a większe rozmiary nie będą pasować - lepiej mieć tekst mniejszy niż to, czego użytkownik chce, aby całkowicie pomieszany układ. Ale w pierwszej kolejności należy zawsze starać się przestrzegać preferencji użytkownika dotyczących rozmiaru czcionki - nawet największe ustawienie nie jest TAKIE duże.
Karu

67

sp = piksel niezależny od skali

dp = dip = piksele niezależne od gęstości

dpi = kropki na cal

Powinniśmy unikać używania sp .

Powinniśmy używać dp do obsługi wielu ekranów.

Android obsługuje różne rozdzielczości ekranu

  • ldpi (niski) ~ 120 dpi
  • mdpi (średni) ~ 160 dpi
  • hdpi (wysoka) ~ 240 dpi
  • xhdpi (bardzo wysoka) ~ 320 dpi
  • xxhdpi (extra-extra-high) ~ 480 dpi
  • xxxhdpi (extra-extra-extra-high) ~ 640 dpi

Urządzenie ldpi 120 dp ma 120 pikseli w rozmiarze 1 cala.

To samo dotyczy innych gęstości ...

Jako inżynierowie oprogramowania powinniśmy zastosować tę formułę konwersji:

piksel = dp * (gęstość / 160)

Tak więc 1 dp 240 dpi urządzenia będzie miało = 1 * (240/160) = 3/2 = 1,5 piksela.

I 1 dpi urządzenia o rozdzielczości 480 dpi będzie miało = 1 * (480/160) = 3 piksele.

Korzystając z wiedzy o 1,5 i 3 pikselach, inżynier oprogramowania może zaprojektować układy dla różnych gęstości.

Aby sprawdzić parametry ekranu dowolnego urządzenia:

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

Toast.makeText(
    this,
    "4:" + metrics.heightPixels + "," + metrics.density + ","
    + metrics.densityDpi, Toast.LENGTH_LONG).show();

Bardzo dobry poradnik dla zrozumienia jest: http: /vinsol.com/blog/2014/11/20/tips-for-designers-from-a-developer
Kushal

5
„Powinniśmy unikać używania sp” Dlaczego tak jest? Powinieneś używać sp, gdy masz do czynienia z rozmiarami czcionek, ponieważ uwzględnia on preferowany przez użytkownika rozmiar tekstu, developer.android.com/training/multiscreen/screendensities.html
ci_

Odpowiedziałem w odniesieniu do perspektywy układu. Proszę przeczytać podany link „więc powinieneś używać tej jednostki miary przy definiowaniu rozmiaru tekstu (ale nigdy dla rozmiarów układu)”.
Kushal

Pytanie brzmiało: „Różnica między px, dp, dip i sp w Androidzie?” Twoja odpowiedź brzmiała: „Powinniśmy unikać używania sp”. Nigdzie nie było mowy o „perspektywie układu”.
ci_

Tak .. dp i dip są takie same ... używane zamiennie ... Czy moja odpowiedź rozwiązuje twoje zapytanie?
Kushal

61

Różnica pomiędzy dpi spjednostki wymienione jako „ font size preferencji użytkownika ” przez odpowiedzi skopiowane z oficjalnej dokumentacji można zaobserwować w czasie wykonywania przez zmianę Settings->Accessibility->Large Textopcji.

Large Textopcja wymusza, aby tekst 1.3był większy.

private static final float LARGE_FONT_SCALE = 1.3f;

Oczywiście może to zależeć od dostawcy, ponieważ leży w pakietach / aplikacjach / ustawieniach .


52

dpi -

  • Kropki na cale
  • Mierzenie gęstości pikseli ekranu.

px - piksel

  • Do mapowania pikseli ekranu

pt - punkty

  • Około 1/72 cala w odniesieniu do fizycznego rozmiaru ekranu.

cale - w odniesieniu do fizycznego rozmiaru ekranu (1 cal = 2,54 cm).

mm - milimetr - w odniesieniu do fizycznego rozmiaru ekranu.

sp - piksel niezależny od skali.

  • Na podstawie preferencji użytkownika dotyczących rozmiaru czcionki.
  • Czcionka powinna być w „sp”.

dip -

  • dip == dp
  • Piksel niezależny od gęstości.
  • Różni się w zależności od gęstości ekranu.
  • Na ekranie o rozdzielczości 160 dpi 1 dp = 1 piksel.
  • Używaj dp oprócz rozmiaru czcionki tekstu.

Standardowo stosowane są dp i sp. sp dla rozmiaru czcionki i dp dla wszystkiego innego.

Wzór na przeliczenie jednostek:

px = dp * (dpi / 160);

Density Bucket -> Screen Display => Physical Size        => Pixel Size                   

ldpi         -> 120 dpi          => 0.5 x 0.5 in         => 0.5 in * 120 dpi = 60x60 px   

mdpi         -> 160 dpi          => 0.5 x 0.5 in         => 0.5 in * 160 dpi = 80x80 px   

hdpi         -> 240 dpi          => 0.5 x 0.5 in         => 0.5 in * 240 dpi = 120x120 px  

xhdpi        -> 320 dpi          => 0.5 x 0.5 in         => 0.5 in * 320 dpi = 160x160 px  

xxhdpi       -> 480 dpi          => 0.5 x 0.5 in         => 0.5 in * 480 dpi = 240x240 px 

xxxhdpi      -> 640 dpi          => 0.5 x 0.5 in         => 0.5 in * 640 dpi = 320x320 px  

Zgodnie z dokumentacją Kompilator akceptuje zarówno „dip”, jak i „dp”, chociaż „dp” jest bardziej spójny z „sp”.
Arunendra

46

Oto formuła używana przez Androida:

px = dp * (dpi / 160)

Gdzie dpi jest jedną z następujących gęstości ekranu. Lista wszystkich możliwych gęstości znajduje się tutaj

Definiuje stałe „DENSITY_ *”.

  • ldpi (niski) ~ 120dpi
  • mdpi (średni) ~ 160dpi
  • hdpi (wysoka) ~ 240dpi
  • xhdpi (bardzo wysoka) ~ 320dpi
  • xxhdpi (extra-extra-high) ~ 480dpi
  • xxxhdpi (extra-extra-extra-high) ~ 640dpi

Zabrano stąd .

To rozwiąże wiele nieporozumień podczas tłumaczenia między px i dp, jeśli znasz rozdzielczość ekranu.

Powiedzmy, że chcesz obrazu o rozdzielczości 60 dp dla ekranu hdpi, wówczas fizyczny rozmiar piksela 60 dp to:

px = 60 * (240 / 160)

45

Rozmiar ekranu w Androidsą pogrupowane w kategorie small, medium, large, extra large, double-extrai triple-extra. Gęstość ekranu to liczba pikseli w obszarze (np. Cal) ekranu. Ogólnie mierzy się go w punktach na cal (dpi). Gęstość ekranu jest pogrupowana jako niska, średnia, wysoka i bardzo wysoka. Rozdzielczość to całkowita liczba pikseli na ekranie.

  • dp: Density Independent Pixel, zmienia się w zależności od gęstości ekranu. Na ekranie o rozdzielczości 160 dpi 1 dp = 1 piksel. Z wyjątkiem rozmiaru czcionki, zawsze używaj dp.
  • dip: dip == dp. We wcześniejszych wersjach Androida użyto dip, a później zmieniono na dp.
  • sp: Skala niezależnego piksela, skalowana na podstawie preferencji rozmiaru czcionki użytkownika. Czcionki powinny używać sp.
  • px: nasz zwykły standardowy piksel, który odwzorowuje piksel ekranowy.
  • w: cale, w odniesieniu do fizycznego rozmiaru ekranu.
  • mm: milimetry w stosunku do fizycznego rozmiaru ekranu.
  • pt: 1/72 cala, w odniesieniu do fizycznego rozmiaru ekranu.

Wzór na konwersję między jednostkami

 px = dp * (dpi / 160)

dp do px w urządzeniu

Poniższy przykład może pomóc lepiej zrozumieć. Skalowanie odbywa się na podstawie wielkości segmentu 120 (ldpi), 160 (mdpi), 240 (hdpi), 320 (xhdpi), 480 (xxhdpi) i 640 (xxxhdpi). Proponowany przez Google współczynnik projektowania wynosi 3: 4: 6: 8: 12 dla ldpi: mdpi: hdpi: xhdpi: xxhdpi

Obraz X o wymiarach 150 x 150 pikseli będzie zajmował,

  • 150 dp X 150 dp miejsca na ekranie w mdpi
  • 100 dp X 100 dp miejsca na ekranie w HDpi
  • 75 dp X 75 dp miejsca na ekranie w xhdpi

Możesz użyć następującego kalkulatora DPI, aby naprawić rozmiary obrazu i inne wymiary, jeśli chcesz mieć jednolity wygląd interfejsu użytkownika na wszystkich urządzeniach z Androidem.

Kalkulator DPI w Javie

/*
Program output
LDPI: 165.0 X 60.0
MDPI: 220.0 X 80.0
HDPI: 330.0 X 120.0
XHDPI: 440.0 X 160.0
XXHDPI: 660.0 X 240.0
XXXHDPI: 880.0 X 320.0
*/


public class DPICalculator {

private final float LDPI = 120;
private final float MDPI = 160;
private final float HDPI = 240;
private final float XHDPI = 320;
private final float XXHDPI = 480;
private final float XXXHDPI = 640;    

private float forDeviceDensity;
private float width;
private float height;

public DPICalculator(float forDeviceDensity, float width, float height){
    this.forDeviceDensity = forDeviceDensity;
    this.width = width;
    this.height = height;
}

public static void main(String... args) {
    DPICalculator dpiCalculator = new DPICalculator(240,330,120);
    dpiCalculator.calculateDPI();
}


private float getPx(float dp, float value) {
    float px = dp * (value / forDeviceDensity );        
    return px;
}

private void calculateDPI() {

    float ldpiW = getPx(LDPI,width);        
    float ldpiH =  getPx(LDPI,height);
    float mdpiW = getPx(MDPI,width);        
    float mdpiH =  getPx(MDPI,height);        
    float hdpiW = getPx(HDPI,width);        
    float hdpiH =  getPx(HDPI,height);       
    float xdpiW = getPx(XHDPI,width);        
    float xdpiH =  getPx(XHDPI,height);
    float xxdpiW = getPx(XXHDPI,width);        
    float xxdpiH =  getPx(XXHDPI,height);
    float xxxdpiW = getPx(XXXHDPI,width);        
    float xxxdpiH =  getPx(XXXHDPI,height);

    System.out.println("LDPI: " + ldpiW + " X " + ldpiH);
    System.out.println("MDPI: " + mdpiW + " X " + mdpiH);
    System.out.println("HDPI: " + hdpiW + " X " + hdpiH);
    System.out.println("XHDPI: " + xdpiW + " X " + xdpiH);
    System.out.println("XXHDPI: " + xxdpiW + " X " + xxdpiH);
    System.out.println("XXXHDPI: " + xxxdpiW + " X " + xxxdpiH);        
   }
}

Więcej informacji można znaleźć pod poniższym linkiem.

http://javapapers.com/android/difference-between-dp-dip-sp-px-in-mm-pt-in-android/


45

Przeczytaj odpowiedź z wiki społeczności. Poniżej wymieniono niektóre informacje, które należy wziąć pod uwagę oprócz powyższych odpowiedzi. Większość programistów Androida tęskni za tym podczas tworzenia aplikacji, więc dodam te punkty.

sp = piksel niezależny od skali

dp = piksele niezależne od gęstości

dpi = gęstość pikseli

Przejrzałem powyższe odpowiedzi ... nie znajdując ich dokładnie poprawnych. sp dla rozmiaru tekstu, dp dla granic układu - standard. Ale sp dla rozmiaru tekstu spowoduje uszkodzenie układu, jeśli zostanie zastosowany nieostrożnie w większości urządzeń.

sp przyjmuje rozmiar tekstu urządzenia, podczas gdy dp przyjmuje standard gęstości urządzenia (nigdy nie zmienia się w urządzeniu) Powiedzmy, że tekst 100sp może zajmować 80% ekranu lub 100% ekranu, w zależności od rozmiaru czcionki ustawionego w urządzeniu

wprowadź opis zdjęcia tutaj

Możesz również używać sp do obwiedni układu, to zadziała :) Żadna standardowa aplikacja nie używa sp dla całego tekstu

Użyj sp i dp dla rozmiaru tekstu z uwzględnieniem UX.

  • Nie używaj sp dla tekstu na pasku narzędzi (można używać wymiarów Androida dostępnych dla różnych rozmiarów ekranu z dp)
  • Nie używaj sp dla tekstu w małych ograniczonych przyciskach, bardzo mniejszym tekście itp

Niektóre osoby używają w telefonie ogromnego rozmiaru FONT-a, aby zwiększyć jego czytelność, co oznacza, że ​​tekst o małych rozmiarach na stałe będzie problemem UX. W razie potrzeby umieść sp dla tekstu, ale upewnij się, że nie złamie układu, gdy użytkownik zmieni swoje ustawienia.

Podobnie, jeśli masz jedną aplikację obsługującą wszystkie wymiary, dodanie zasobów xxxhdpi znacznie zwiększa rozmiar aplikacji. Ale teraz telefony xxxhdpi są powszechne, więc musimy uwzględnić zasoby xxxhdpi co najmniej dla ikon na pasku bocznym, pasku narzędzi i pasku dolnym. Lepiej jest przejść do obrazów wektorowych, aby uzyskać jednolity obraz o lepszej jakości dla wszystkich rozmiarów ekranu.

Pamiętaj też, że ludzie używają niestandardowych czcionek w swoich telefonach. Tak więc brak czcionki może powodować problemy dotyczące odstępów i tak dalej. Powiedz, że rozmiar czcionki 12sp dla niestandardowej czcionki może zająć kilka pikseli więcej niż czcionka domyślna.

Zapoznaj się z witryną programistów Google, aby zapoznać się ze szczegółami i szczegółami dotyczącymi systemu Android. https://developer.android.com/training/multiscreen/screendensities


43
  • px - jeden piksel, taki sam jak w CSS, JavaScript itp.
  • sp - piksele niezależne od skali
  • dip - piksele niezależne od gęstości

Zwykle dla rozmiarów czcionek stosuje się sp, podczas gdy dla innych stosuje się dip (zwany również dp).


39

Natknąłem się na dobry artykuł na temat projektowania interfejsu aplikacji na Androida dla różnych rozdzielczości ekranu i chciałbym zostawić go tutaj tylko dla osób szukających w tym obszarze. Tak, wiem, że jest to jakoś opisane w dokumentach Google (i wspomniane w powyższych postach), przeczytałem to, ale to nie było dla mnie dobre (tak, mogę być zbyt głupi)). Nie było dla mnie jasne, jak zaprojektować układy obsługujące ekran o różnej wielkości. Nienawidzę koncepcji DP i tak dalej, kiedy muszę zaimplementować „elastyczny” układ interfejsu dla różnych ekranów. (Cześć programiści iOS - tak, masz rację, to koncepcja Storyboard).

Android nie ma złej koncepcji interfejsu użytkownika, ale niestety nie ma funkcji iOS Storyboard. Projektowanie elastycznego interfejsu użytkownika w systemie Android nie jest łatwe (w najlepszym wypadku).

Oto artykuł, który pomógł mi zrozumieć, co robić w Androidzie, aby tworzyć układy dla różnych rozmiarów ekranu:

Blog JMSTUDIO: - Wybierz rozmiar ekranu aplikacji na Androida

Jak zaprojektować interfejs użytkownika dla aplikacji na Androida dla różnych rozmiarów ekranu

Aby zaprojektować interfejs aplikacji dla różnych rozmiarów ekranu, nasz początkowy projekt musi spełniać minimalną wymaganą przestrzeń dla każdego rozmiaru ekranu. Android określa minimalny rozmiar (w dp) dla każdego uogólnionego typu ekranu. Oto wytyczne dotyczące wielkości ekranu Androida. Minimalny rozmiar ekranu dla Androida w dp Gdy otrzymamy rozmiar ekranu w dp, nie wystarczy nam zaprojektować interfejs aplikacji na Androida. Dla każdego rozmiaru ekranu musimy przygotować grafikę i obrazy bitmapowe dla każdej gęstości. Oto wytyczne dotyczące gęstości ekranu Androida. Android Density Guideline (dpi)

Aby ułatwić obliczenia, możemy zastosować współczynnik skalowania 3: 4: 6: 8 między czterema uogólnionymi gęstościami. Jeśli utworzymy obraz 36 × 36 pikseli dla urządzenia ldpi, rozmiar pozostałych zdjęć gęstości będzie wynosił 48 × 48 dla mdpi, 72 × 72 dla hdpi i 96 × 96 dla xhdpi.

Jak zaprojektować interfejs aplikacji Android w Photoshopie

Wielu projektantów ma problemy z projektowaniem interfejsu aplikacji na Androida w Photoshopie lub innych narzędziach do projektowania graficznego opartego na pikselach z powodu jednostki niezależnej od gęstości, dp. Projektanci nie wiedzą, jak zamapować dp na piksele. Google nie podaje też dla nich jasnego przewodnika po projektowaniu interfejsu użytkownika Androida, chociaż podaje podstawową formułę translacji dp i pikseli.

Zgodnie z definicją Androida, 1pd równa się 1px poniżej 160 dpi urządzenia (mdpi). Dlatego chcemy zaprojektować aplikację dla systemu Android na duże urządzenie z gęstością mdpi, możemy zdefiniować rozmiar interfejsu użytkownika w pikselach jako 960 pikseli szerokości i 720 pikseli wysokości; Postępuj zgodnie z tą samą zasadą mapowania, możemy uzyskać następujące wytyczne projektowania interfejsu użytkownika w rozmiarze ekranu aplikacji na Androida:

Rozmiar ekranu aplikacji na Androida w wytycznych Pixel

DODANO : Jeśli interesuje Cię również „elastyczny” interfejs użytkownika, spójrz na tę bibliotekę: Android SDK, który zapewnia nową jednostkę wielkości - sdp (skalowalny dp). Ta jednostka rozmiaru skaluje się wraz z rozmiarem ekranu (wspomniano również w odpowiedzi tutaj o SDPbibliotece)

ADDED2 Google w końcu zrozumiał użyteczność koncepcji interfejsu użytkownika iOS Storeboard, a oto ConstraintLayoutświat Androida: Zbuduj responsywny interfejs użytkownika za pomocą ConstraintLayout


32

1) dp: (density independent pixels)

Liczba pikseli reprezentowanych w jednej jednostce dp wzrośnie wraz ze wzrostem rozdzielczości ekranu (gdy będzie więcej kropek / pikseli na cal). I odwrotnie, na urządzeniach o niższej rozdzielczości liczba pikseli w jednostce dp zmniejszy się. Ponieważ jest to jednostka względna, musi mieć linię bazową do porównania. Ta linia bazowa to ekran o rozdzielczości 160 dpi. To jest równanie:px = dp * (dpi / 160).


2) sp: (scale independent pixels)

To urządzenie skaluje się zgodnie z rozdzielczością ekranu (podobną do dp), a także preferencjami użytkownika dotyczącymi rozmiaru czcionki.


3) px: (pixels)

Rzeczywiste piksele lub kropki na ekranie.


Aby uzyskać więcej informacji, możesz odwiedzić

Android Developer Guide> Dimension
Android Developer Guide> Ekrany


29

Rozmiar ekranu w Androidzie są pogrupowane w kategorie ldpi, mdpi, hdpi, xhdpi, xxhdpii xxxhdpi. Gęstość ekranu to liczba pikseli w obszarze (np. Cal) ekranu. Zasadniczo jest mierzony w punktach na cal ( dpi).

PX(Pixels):

  • nasz zwykły standardowy piksel, który odwzorowuje piksel ekranowy. pxjest przeznaczony dla pikseli bezwzględnych. Jest to używane, jeśli chcesz podać w kategoriach bezwzględnych pikseli szerokości lub wysokości. Niepolecane.

DP/DIP(Density pixels / Density independent pixels):

  • dip == dp. We wcześniejszych wersjach Androida użyto dip, a później zmieniono na dp. To jest alternatywa dla px.

  • Zasadniczo nigdy nie używamy, pxponieważ jest to wartość bezwzględna. Jeśli użyjesz pxdo ustawienia szerokości lub wysokości i jeśli aplikacja jest pobierana na urządzenia o różnych rozmiarach ekranu, widok ten nie będzie rozciągał się jak w oryginalnym rozmiarze ekranu.

  • dpzaleca się stosowanie zamiast px. Użyj, dpjeśli chcesz wspomnieć o szerokości i wysokości, aby dynamicznie rosnąć i kurczyć się w zależności od rozmiarów ekranu.

  • jeśli damy dp/dip, Android automatycznie obliczy rozmiar piksela na podstawie ekranu o rozmiarze 160 pikseli.

SP(Scale independent pixels):

  • skalowane na podstawie preferencji użytkownika dotyczących rozmiaru czcionki. Czcionki powinny używać sp.

  • gdy wspominasz o rozmiarach czcionek pasujących do różnych rozmiarów ekranu, użyj sp. Jest to podobne do dp.Używaj spszczególnie, aby rozmiary czcionek dynamicznie rosły i zmniejszały się w zależności od rozmiarów ekranu

Dokumentacja Androida mówi:

przy określaniu wymiarów zawsze używaj jednego z nich dplub spjednostek. A dpto piksel niezależny od gęstości, który odpowiada rozmiarowi fizycznemu piksela przy 160 dpi. Jest spto ta sama jednostka podstawowa, ale jest skalowana według preferowanego przez użytkownika rozmiaru tekstu (jest to piksel niezależny od skali), dlatego należy używać tej jednostki miary podczas definiowania rozmiaru tekstu


21

Ekran telefonu komórkowego składa się z tysięcy małych kropek zwanych pikselami (px) . Piksel to najmniejszy element, który tworzy zdjęcie. Im większa liczba pikseli do zrobienia zdjęcia lub sformułowania, tym ostrzejsza staje się i sprawia, że ​​ekran smartfona jest bardziej czytelny.

Rozdzielczość ekranu mierzy się liczbą pikseli na ekranie. Rozdzielczość ekranu jest często stosowaną specyfikacją przy zakupie urządzenia, ale w rzeczywistości nie jest tak przydatna podczas projektowania dla Androida, ponieważ myślenie o ekranach w kategoriach pikseli ignoruje pojęcie rozmiaru fizycznego, co dla urządzenia dotykowego jest naprawdę bardzo ważne.

Piksel niezależny od gęstości (dp lub dip) pozwala projektantowi tworzyć zasoby, które pojawiają się w oczekiwany sposób, bez względu na rozdzielczość lub gęstość urządzenia docelowego.

Piksel niezależny od gęstości (dp lub dip) jest równy jednemu pikselowi przy gęstości podstawowej lub 160 dpi (kropki na cal).

1 px / 1dp = 160 dpi / 160 dpi

2 piksele / 1dp = 320 dpi (2x) / 160 dpi

gdzie,

dpi to liczba punktów na cal

Tak więc przy 320 dpi 1 dp to 2 piksele.

Formuła

px / dp = dpi / 160dpi

Kropki na cal (dpi) to miara ostrości (to znaczy gęstości podświetlonych punktów) na ekranie wyświetlacza. Kropki na cal dla danej rozdzielczości obrazu będą się różnić w zależności od ogólnego rozmiaru ekranu, ponieważ ta sama liczba pikseli jest rozmieszczona na innym obszarze.

Praca z pikselami niezależnymi od gęstości pomaga nam uporać się z sytuacją, w której masz dwa urządzenia o tej samej rozdzielczości pikseli, ale z różną ilością miejsca. Załóżmy, że w przypadku tablet i telefon mają tę samą rozdzielczość pikseli odpowiednio 1280 na 800 pikseli (160 dpi) i 800 na 1280 pikseli (320 dpi).

Ponieważ tablet ma podstawową gęstość (160 dpi), jego rozmiary fizyczne i niezależne od gęstości są takie same, 1280 x 800. Z drugiej strony telefon ma większą gęstość pikseli, więc ma o połowę mniej pikseli niezależnych od gęstości piksele. Telefon ma więc piksele niezależne od gęstości 400 na 640. Dlatego użycie piksela niezależnego od gęstości ułatwia wyobrażenie sobie, że tablet ma znacznie więcej miejsca niż telefon.

Podobnie, jeśli masz dwa urządzenia o podobnym rozmiarze ekranu, ale o różnej gęstości pikseli, powiedzmy, że jedno ma rozdzielczość 800 x 1280 pikseli (320 dpi), a drugie 400 x 640 pikseli (160 dpi), nie musimy definiować całkowicie różne układy dla tych dwóch urządzeń, ponieważ możemy mierzyć zasoby pod względem pikseli niezależnych od gęstości, które są takie same dla obu urządzeń.

800 na 1280 pikseli (320dpi) = 400 na 640 pikseli niezależnych od gęstości (dp)

400 na 640 pikseli (160 dpi) = 400 na 640 pikseli niezależny od gęstości (dp)

Rozdzielczość niezależna od skali (sp) jest preferowaną jednostką wielkości czcionki. W celu ułatwienia dostępu, Android pozwala użytkownikom dostosować rozmiar czcionki w urządzeniu. Użytkownicy, którzy mają problemy z odczytaniem tekstu, mogą zwiększyć rozmiar czcionki swojego urządzenia. Zazwyczaj tę opcję można znaleźć w ustawieniach wyświetlania w telefonie lub tablecie poniżej rozmiaru czcionki. Często jest również dostępny w ustawieniach dostępności.

Przy pikselach niezależnych od skali, 16 sp jest dokładnie takie samo jak 16 dp, gdy rozmiar czcionki urządzenia jest normalny lub 100%. Ale gdy rozmiar czcionki urządzenia jest duży, na przykład 125%, 16 sp przełoży się na 20 dp lub 1,25 razy 16.

Jeśli użyjesz dp jako jednostki rozmiaru czcionki, to ten fragment tekstu ma określony rozmiar fizyczny, bez względu na to, czy użytkownik dostosował rozmiar czcionki urządzenia. Używanie jednostek SP zapewni lepsze wrażenia osobom z upośledzeniem wzroku.

Odniesienie : Udacity , Google


19

sp: piksel niezależny od skali

Powinieneś używać go z tekstami, ponieważ jest on automatycznie skalowany zgodnie z rozmiarem czcionki używanej przez użytkownika w jego urządzeniu.

px: piksel lub element obrazu to pojedynczy punkt na ekranie


19

Zagęszczenie pikseli

Gęstość pikseli ekranu i rozdzielczość różnią się w zależności od platformy. Piksele niezależne od urządzenia i piksele skalowalne to jednostki, które zapewniają elastyczny sposób na dostosowanie projektu do różnych platform.

Obliczanie gęstości pikseli

Liczba pikseli pasujących do cala jest określana jako gęstość pikseli. Ekrany o wysokiej gęstości mają więcej pikseli na cal niż te o niskiej gęstości ....

Liczba pikseli pasujących do cala jest określana jako gęstość pikseli. Ekrany o wysokiej gęstości mają więcej pikseli na cal niż te o niskiej gęstości. W rezultacie elementy interfejsu użytkownika o tych samych wymiarach pikseli wydają się większe na ekranach o niskiej gęstości, a mniejsze na ekranach o wysokiej gęstości.

Aby obliczyć gęstość ekranu, możesz użyć tego równania:

Gęstość ekranu = szerokość (lub wysokość) ekranu w pikselach / szerokość (lub wysokość) ekranu w calach

Wyświetlacze o wysokiej gęstości i niższej gęstości

Niezależność od gęstości

Gęstość pikseli ekranu i rozdzielczość różnią się w zależności od platformy. Piksele niezależne od urządzenia i piksele skalowalne to jednostki, które zapewniają elastyczny sposób na dostosowanie projektu do różnych platform.

Obliczanie gęstości pikseli Liczba pikseli, które mieszczą się w calach, nazywana jest gęstością pikseli . Ekrany o wysokiej gęstości mają więcej pikseli na cal niż te o niskiej gęstości ....

Niezależność od gęstości odnosi się do jednolitego wyświetlania elementów interfejsu użytkownika na ekranach o różnych gęstościach.

Piksele niezależne od gęstości , zapisane jako dp (wymawiane jako „ spadki ”), są elastycznymi jednostkami, które skalują się, aby mieć jednolite wymiary na dowolnym ekranie. Interfejsy użytkownika materiałów używają pikseli niezależnych od gęstości do spójnego wyświetlania elementów na ekranach o różnej gęstości.

  1. Wyświetlany ekran o niskiej gęstości z niezależnością od gęstości
  2. Ekran o wysokiej gęstości wyświetlany z niezależnością od gęstości

Przeczytaj pełny tekst https://material.io/design/layout/pixel-density.html


16

Piksele (px) - odpowiadają rzeczywistym pikselom na ekranie. Jest to używane, jeśli chcesz podać w kategoriach bezwzględnych pikseli szerokości lub wysokości.

Piksele niezależne od gęstości (dp lub dip) - abstrakcyjna jednostka oparta na fizycznej gęstości ekranu. Jednostki te odnoszą się do ekranu o rozdzielczości 160 dpi, więc jeden dp to jeden piksel na ekranie o rozdzielczości 160 dpi. Stosunek dp-do piksela zmienia się wraz z gęstością ekranu, ale niekoniecznie w proporcji bezpośredniej. Uwaga: Kompilator akceptuje zarówno „dip”, jak i „dp”, chociaż „dp” jest bardziej spójny z „sp”.

Pikale niezależne od skali (sp) - to jest jak jednostka dp, ale jest również skalowane przez preferencje użytkownika dotyczące rozmiaru czcionki. Zaleca się korzystanie z tego urządzenia podczas określania rozmiarów czcionek, aby dopasować je zarówno do gęstości ekranu, jak i preferencji użytkownika.

Zawsze używaj tylko dp i sp. sp dla rozmiarów czcionek i dp dla wszystkiego innego. Sprawi, że interfejs użytkownika będzie kompatybilny z urządzeniami z Androidem o różnych gęstościach. Możesz dowiedzieć się więcej o pikselach i dp na https://www.google.com/design/spec/layout/units-measurements.html#units-measurements-density-independent-pixels-dp-

Adres URL źródła: - http://www.androidtutorialshub.com/what-is-the-difference-between-px-dp-dip-sp-on-android/


15

Chcę zapewnić łatwy sposób zrozumienia dp. Myślę, że dpnajłatwiej to zrozumieć. dpjest tylko jednostką długości fizycznej. Ma ten sam wymiar co mmlub inch. To jest po prostu wygodne dla nas napisać 50dp, 60dpa nie 50/160 inchczy 60/160 inch, bo jeden dpjest tylko 1/160 inchniezależnie od wielkości ekranu lub rozdzielczość to.

Jedynym problemem jest to, że rozdzielczość dpi niektórych ekranów w systemie Android nie jest dokładna. Na przykład ekran sklasyfikowany jako 160dpi może rzeczywiście mieć 170dpi. Tak więc wynik obliczeń dpjest rozmyty. Powinien być mniej więcej taki sam jak 1/160 inch.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.