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


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

  • px
  • zanurzać
  • dp
  • sp

5159
2018-01-08 03:23


pochodzenie


to jest pełna różnica między px, dip, dp i sp w Androidzie [ developer.android.com/guide/topics/resources/... - NagarjunaReddy
Ten sprytny konwerter najlepiej to pokazuje, w mojej opinii. Jest to również bardzo przydatne przy eksportowaniu sprite'ów z Photoshopa lub projektowaniu wyglądu dla fizycznego wymiaru. - Paul Lammertsma
nowy opis w Google Design Jednostki i pomiary - Arnav M.
Różnica między DP, SP i Pixels z przykładami. - Ajit Singh
Jak programowo dokonać konwersji między px, dp, i sp - Suragch


Odpowiedzi:


Od Dokumentacja dla programistów Androida:

  1. px
    Piksele - odpowiada rzeczywistym pikselom na ekranie.

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

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

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

  5. dp lub zanurzać
    Gęstośćniezależne Piksele - abstrakcyjna jednostka oparta na fizycznej gęstości ekranu. Te jednostki odnoszą się do 160       ekran dpi, więc jeden dp to jeden piksel na ekranie 160 dpi. Stosunek       dp-to-pixel zmieni się z gęstością ekranu, ale niekoniecznie       w bezpośredniej proporcji. Uwaga: Kompilator akceptuje zarówno "dip" jak i       "dp", chociaż "dp" jest bardziej zgodny z "sp".

  6. sp
    Skalaniezależne Piksele - jest to jak jednostka dp, ale jest również skalowane według preferencji rozmiaru czcionki użytkownika. Jest to zalecane       używaj tego urządzenia podczas określania rozmiarów czcionek, aby zostały one dostosowane       zarówno dla gęstości ekranu, jak i preferencji użytkownika.

Od Zrozumieć niezależność od gęstości w systemie Android:

+----------------+----------------+---------------+-------------------------------+
| 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 dziale Dokumentacja Google Design.

Aby obliczyć wymiary na prawdziwym urządzeniu to Aplikacja może być używana.


5196
2018-02-25 12:56



mimo że powinny być takie same, mam tendencję do problemów z dp, podczas gdy wszystko działa dobrze z dipem - DallaRosa
Jedna uwaga na temat db / sp, która nie jest całkowicie oczywista: Skalowanie, które występuje dla nich, zależy nie od rzeczywistej gęstości urządzenia (dpi), ale od którego "kubka" gęstości sięga: dostępne wiadra wynoszą: 120,160,240,320. Może to powodować problemy z obsługą ekranów, które znacznie się różnią, ale są zbite w ten sam sposób. - Fraggle
Zauważ, że dokumentacja nie wspomina już w ogóle o "zanurzeniu", po prostu "dp", chociaż kompilator nadal wydaje się akceptować "dip". - Adam Rosenfield
@android_developer (5 komentarzy powyżej) dp robi nie mieć dokładnie taką samą długość fizyczną. (Chociaż jest blisko.) Zobacz komentarz @ Fraggle o bucketing. Oznacza to, że 48dp będzie w przybliżeniu 8 mm (0.3 cala), ale może się różnić do 11 mm. - intrepidis
Powodem gromadzenia 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ć tak samo na wielu urządzeniach. Więc nawet jeśli fizyczny rozmiar przycisków itp. Trochę się zmieni, ogólny wygląd działania będzie taki sam. - intrepidis


Prawie wszystko na ten temat i jak uzyskać 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 Android grupuje wszystkie rzeczywiste rozmiary ekranu na cztery   uogólnione rozmiary: małe, normalne, duże i bardzo duże.

Gęstość ekranu
    Ilość pikseli w obszarze fizycznym   ekran; zwykle określane jako dpi (punkty na cal). Na przykład a   ekran "niskiej" gęstości ma mniej pikseli w danym obszarze fizycznym,   w porównaniu do ekranu "normalnego" lub "wysokiego" gęstości. Dla prostoty,   Android grupuje wszystkie rzeczywiste gęstości ekranu w sześć uogólnionych   gęstości: niski, średni, wysoki, bardzo wysoki, ekstra-wysoki, oraz   extra-extra-extra-high.

Orientacja
Orientacja ekranu od punktu użytkownika   widok. Jest to krajobraz lub portret, co oznacza, że ​​ekran   Proporcje są odpowiednio szerokie lub wysokie. Bądź świadomy, że nie   tylko różne urządzenia działają w różnych orientacjach   domyślnie, ale orientacja może się zmienić w czasie wykonywania, gdy użytkownik   obraca urządzenie.

Rozkład
 Łączna liczba fizycznych pikseli włączona   ekran. Podczas dodawania obsługi wielu ekranów aplikacje działają   nie działa bezpośrednio z rozdzielczością; wnioski powinny dotyczyć   tylko z rozmiarem ekranu i gęstością, jak określono w uogólnionym   grupy wielkości i gęstości.

Piksel niezależny od gęstości (dp)
 Wirtualny   jednostka pikselowa, której powinieneś użyć podczas definiowania układu interfejsu użytkownika, aby wyrazić   wymiary lub położenie układu w sposób niezależny od gęstości.   Piksel niezależny od gęstości jest równoważny z jednym fizycznym pikselem na 160   ekran dpi, który jest bazową gęstością przyjętą przez system dla a   ekran o średniej gęstości. W czasie wykonywania system obsługuje przezroczysto   dowolne skalowanie jednostek dp, w razie potrzeby, w oparciu o rzeczywistą gęstość   ekranu w użyciu. Konwersja jednostek dp na piksele ekranu jest   prosty:    px = dp * (dpi / 160).   Na przykład na ekranie 240 dpi 1 dp   równa się 1,5 fizycznej pikseli. Zawsze powinieneś używać jednostek dp, gdy   definiowanie interfejsu użytkownika aplikacji, aby zapewnić prawidłowe wyświetlanie interfejsu użytkownika   ekrany o różnych gęstościach.

Jeśli poważnie myślisz o stworzeniu aplikacji na Androida dla więcej niż jednego typu urządzenia, powinieneś przynajmniej raz przeczytać zawartość tego dokumentu. Oprócz tego zawsze dobrze jest znać faktyczną liczbę aktywnych urządzeń, które mają określoną konfigurację ekranu.


606
2017-08-02 14:15



Więc jeśli użyjesz dp dla przycisku i sp dla rozmiaru czcionki tekstu przycisku, co się stanie, gdy użytkownik zacznie skalować? Tekst zostanie powiększony, ale czy przycisk będzie się nadawał do tego przez powiększanie? - Wytze
@ Wytze, nie. W przypadku rzeczy, w których dopasowanie tekstu może być problemem, po prostu używałbym dipu, więc rzeczy nie przelewają się. - eski
@Wytze I ja, przeciwnie, używaj sp zarówno dla tekstu, jak i cokolwiek, co zawiera. Na przykład, jeśli mam przycisk z ustalonym rozmiarem i tekstem w środku, przypisuję rozmiar przycisku w sp, więc w razie potrzeby skaluje się. W przeciwnym razie użytkownik będzie denerwował się tym, że zwiększył rozmiar tekstu i nie zwiększył się. Oczywiście układ powinien być wystarczająco elastyczny, aby na to pozwolić. - Malcolm
@Sam Cóż, od Ciebie zależy, co jest ważniejsze: Twój projekt lub umiejętność czytania i czytania z problemami ze wzrokiem. - Malcolm
Jeśli twoi projektanci nie zostawiają miejsca dla elementów tekstowych skalowanych według rozmiaru sp, jedną z opcji jest przejście do dowolnego układu, którego użyjesz do węższego urządzenia, a następnie skalowanie wszystkiego równomiernie przez (DisplayMetrics.scaledDensity / DisplayMetrics. gęstość). - John Mellor


Poniżej opiszę, jak dokładnie program dp konwertuje na px:

  • Jeśli działa na urządzeniu mdpi, a 150 x 150 px zdjęcie zajmie 150 * 150 dp miejsca na ekranie.
  • Jeśli działa na urządzeniu hdpi, a 150 x 150 px zdjęcie zajmie 100 * 100 dp miejsca na ekranie.
  • Jeśli działa na urządzeniu xhdpi, a 150x150 px zdjęcie zajmie 75 * 75 dp miejsca na ekranie.

Na odwrót: powiedz, że chcesz dodać obraz do swojej aplikacji i potrzebujesz go do wypełnienia 100 * 100 dp kontrola. Będziesz musiał utworzyć obrazy o różnych rozmiarach dla obsługiwanych rozmiarów ekranu:

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

280
2017-10-30 09:43



Jak obliczyć 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 piksel = 1 dp (piksel fizyczny 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 to (1) * (320/160) = 2 piksele, a dwa dp to (2) * (320/160) = 4 piksele. - samsara
Wyrównaj je w monospace, aby zobaczyć: | 1dp |, | ___ | ___ | 160, | _ | _ | _ | _ | 320 (wstawianie linii po przecinkach). | _ | = 1 strjaxel. - samsara
re "Musisz utworzyć obrazy o różnych rozmiarach dla obsługiwanych rozmiarów ekranu:" To zależy. Dla mały wysoki kontrast obrazy, np. ikony, mądrze jest stworzyć co najmniej najmniejszy rozmiar (aby się upewnić, że będzie czysty) oraz dość duży rozmiar (aby duże wersje nie wyglądały na zamglone). Ale nawet w przypadku ikon można pozwolić na skalowanie jednego obrazu w różnych rozmiarach, przy wyższych gęstościach. W przypadku fotografii wystarczy określić obszar wyświetlania, który ma zostać wypełniony, i polegać na skalowaniu urządzenia. - ToolmakerSteve


px Piksele - punkt na podziałkę odpowiada rzeczywistym pikselom na ekranie.

w Cale - w oparciu o fizyczny rozmiar ekranu.

mm Milimetry - w oparciu o fizyczny rozmiar ekranu.

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

dp Gęstość - niezależne Piksele - abstrakcyjna jednostka oparta na fizycznej gęstości ekranu. Te jednostki odnoszą się do ekranu o rozdzielczości 160 dpi, a więc do jednego dp to jeden piksel na ekranie o rozdzielczości 160 dpi. Stosunek dp-do-piksela zmieni się wraz z gęstością ekranu,  ale niekoniecznie w bezpośredniej proporcji.  Uwaga: Kompilator akceptuje oba dip i dp, chociaż dp jest bardziej zgodny z sp.

sp Piksele niezależne od skali - to jest jak dp jednostka,  ale jest również skalowany według preferencji rozmiaru czcionki użytkownika. Zaleca się używanie tego urządzenia podczas określania rozmiarów czcionek,  więc będą one dostosowane zarówno do gęstości ekranu, jak i preferencji użytkownika.

Weźmy przykład dwóch ekranów o tym samym rozmiarze, ale jeden ma gęstość ekranu 160 dpi (punkty 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

232
2017-07-26 21:19





Ponadto powinieneś mieć jasne zrozumienie następujących pojęć:

Rozmiar ekranu:

Rzeczywisty rozmiar fizyczny, mierzony jako przekątna ekranu. Dla uproszczenia Android grupuje wszystkie rzeczywiste rozmiary ekranu   cztery uogólnione rozmiary: małe, normalne, duże i bardzo duże.

Gęstość ekranu: 

Ilość pikseli w fizycznym obszarze ekranu; zwykle określane jako dpi (punkty na cal). Na przykład a   ekran "niskiej" gęstości ma mniej pikseli w danym obszarze fizycznym,   w porównaniu do ekranu "normalnego" lub "wysokiego" gęstości. Dla prostoty,   Android grupuje wszystkie rzeczywiste gęstości ekranu na cztery uogólnione   gęstości: niski, średni, wysoki i bardzo wysoki.

Orientacja: 

Orientacja ekranu z punktu widzenia użytkownika. Jest to krajobraz lub portret, co oznacza, że   Współczynnik proporcji ekranu jest odpowiednio szeroki lub wysoki. Być świadomym   że nie tylko różne urządzenia działają w różnych orientacjach   domyślnie, ale orientacja może się zmienić w czasie wykonywania, gdy użytkownik   obraca urządzenie.

Rozkład:

Łączna liczba fizycznych pikseli na ekranie. Dodając obsługę wielu ekranów, aplikacje nie działają bezpośrednio   z rozdzielczością; aplikacje powinny dotyczyć tylko ekranu   rozmiar i gęstość, określone przez uogólniony rozmiar i gęstość   grupy.

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

Wirtualna jednostka pikselowa, której należy użyć podczas definiowania układu interfejsu użytkownika, aby wyrazić wymiary układu lub   pozycja w sposób niezależny od gęstości. Piksel niezależny od gęstości   jest równoważny z jednym fizycznym pikselem na ekranie 160 dpi, który jest   gęstość bazowa przyjęta przez system dla ekranu o "średniej" gęstości.   W czasie wykonywania system przezroczysto obsługuje dowolne skalowanie dp   jednostki, w zależności od potrzeb, w oparciu o rzeczywistą gęstość używanego ekranu.   Konwersja jednostek dp na piksele ekranu jest prosta: px = dp * (dpi   / 160). Na przykład na ekranie 240 dpi 1 dp równa się 1,5 fizycznej   piksele. Podczas definiowania zawsze powinieneś używać jednostek dp dp   interfejs użytkownika aplikacji, aby zapewnić prawidłowe wyświetlanie interfejsu użytkownika na ekranach   różne gęstości.

Odniesienie: Witryna dla programistów Androida


183
2017-10-17 12:47





dp jest dip. Użyj go do wszystkiego (margines, dopełnienie itp.).

Posługiwać się sp tylko dla {rozmiaru tekstu}.


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


Zobacz różnicę między px, dp i sp na różnych rozmiarach ekranu.

Enter image description here

Źródło: Programowanie na Androida: przewodnik po ranczerach dla dużych frajerów


168
2018-01-10 19:13



Ale nie mogę przekazać wartości dp do setX lub setY, android nie tłumaczy tego tutaj. Co mogę zrobić? - Daniel Viaño


Obliczyłem poniższy wzór, by dokonać konwersji dpi do dp i sp enter image description here


118
2017-12-27 09:21



Powinien mieć wartość ppi zamiast dpi - Prateek


Definicje

px lub kropka to piksel na fizycznym ekranie.

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

Android daje pseudonimy do kilku gęstości

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

zanurzać lub dp są gęstości niezależne piksele, tj. odpowiadają mniej więcej pikselom w zależności od gęstości fizycznej.

  • 1dp = 1px na mdpi

enter image description here

sp lub łyk jest niezależny od skalowania piksel. Są one skalowane, gdy Duży tekst opcja jest włączona Ustawienia > Dostępność

  • 1sp = 1dp
  • 1sp = 1,2dp z ułatwieniem dostępu Duży tekst

Co używać?

Posługiwać się sp dla rozmiaru tekstu.

Posługiwać się dp dla wszystkiego innego.


107
2017-09-20 21:34





Ź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. Określono wymiar   z liczbą i jednostką miary. Na przykład: 10px, 2in,   5sp. Poniższe jednostki miary są obsługiwane przez Androida:

dp

Piksele niezależne od gęstości - abstrakcyjna jednostka oparta na   gęstość fizyczna ekranu. Jednostki te odnoszą się do 160 dpi   (punkty na cal) ekranu, na którym 1p jest mniej więcej równe 1 pikselowi. Gdy   na ekranie o większej gęstości, liczba pikseli użytych do narysowania   Wartość 1dp jest powiększana o współczynnik odpowiedni dla rozdzielczości ekranu.   Podobnie, gdy na ekranie o niższej gęstości, używana jest liczba pikseli   dla 1dp jest zmniejszana. Stosunek dp-do-piksela zmieni się z   gęstości ekranu, ale niekoniecznie w bezpośredniej proporcji. Używanie dp   jednostki (zamiast jednostek px) to proste rozwiązanie do tworzenia widoku   wymiary w twoim układzie zmieniają się odpowiednio dla różnych ekranów   gęstości. Innymi słowy, zapewnia spójność w rzeczywistym świecie   rozmiary elementów interfejsu użytkownika na różnych urządzeniach.

sp

Niezależne od skali piksele - To jest jak jednostka dp, ale jest również   skalowane według preferencji rozmiaru czcionki użytkownika. Zaleca się używać   to urządzenie podczas określania rozmiarów czcionek, więc zostaną one dostosowane   zarówno gęstość ekranu, jak i preferencje użytkownika.

pt

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

px

Piksele - odpowiada rzeczywistym pikselom na ekranie. Ta jednostka   miara nie jest zalecana, ponieważ rzeczywiste przedstawienie może się różnić   na różnych urządzeniach; każde urządzenie może mieć inną liczbę pikseli na jeden   cale i może mieć mniej lub więcej pikseli dostępnych na ekranie.

mm

Milimetry - w oparciu o fizyczny rozmiar ekranu.

w

Cale - w oparciu o fizyczny rozmiar ekranu.

Uwaga: Wymiar jest prostym zasobem, do którego odwołuje się za pomocą wartości podanej w atrybucie nazwy (a nie w nazwie pliku XML). Jako taki można łączyć zasoby wymiarów z innymi prostymi zasobami w jednym pliku XML, pod jednym elementem.


104
2018-04-02 06:35



Ponadto: jaka jest wartość dodana tej odpowiedzi? Wydaje się, że nie ma niczego, co nie zostało już wspomniane w innych odpowiedziach. - laalto


Zasadniczo jedynym momentem, w którym px ma zastosowanie, jest jeden piksel, a jeśli chcesz dokładnie jeden piksel na ekranie, tak jak w przypadku dzielnika:

Przy rozdzielczości> 160 dpi możesz otrzymać 2-3 piksele,

On> 120 dpi, zaokrągla do 0.


96
2017-07-09 05:46



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