Wat is het verschil tussen "px", "dip", "dp" en "sp"?

Wat is het verschil tussen de maateenheden van Android?

  • px
  • dip
  • dp
  • sp
Oplossing

Uit de Android Developer Documentation:

  1. px Pixels - komt overeen met de werkelijke pixels op het scherm.

  2. in Inches - gebaseerd op de fysieke grootte van het scherm.
    1 Inch = 2,54 centimeters

  3. mm Millimeters - gebaseerd op de fysieke grootte van het scherm.

  4. pt Punten - 1/72 van een inch op basis van de fysieke grootte van het scherm.

  5. dp of dip Dichtheid-onafhankelijke Pixels - een abstracte eenheid die is gebaseerd op de fysieke dichtheid van het scherm. Deze eenheden zijn relatief ten opzichte van een 160 dpi scherm, dus één dp is één pixel op een 160 dpi scherm. De verhouding van dp-tot-pixel zal veranderen met de dichtheid van het scherm, maar niet noodzakelijk in directe verhouding. Opmerking: De compiler accepteert zowel "dip" als "dp", hoewel "dp" meer consistent is met "sp".

  6. sp Schaal-onafhankelijke Pixels - dit is als de dp eenheid, maar het wordt ook geschaald door de gebruiker's lettergrootte voorkeur. Het is aanbevolen dat u deze eenheid te gebruiken wanneer u lettergrootte opgeeft, zodat ze worden aangepast voor zowel de dichtheid van het scherm als de voorkeur van de gebruiker's.

Uit Understanding Density Independence In 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      |               |             |                    | 
+---------+-------------+---------------+-------------+--------------------+

Meer info is ook te vinden in de Google Design Documentation.

Commentaren (11)

Vrijwel alles hierover en over hoe de beste ondersteuning te bereiken voor meerdere schermen van verschillende grootte en dichtheid is hier zeer goed gedocumenteerd:

Schermgrootte
Werkelijke fysieke grootte, gemeten als de diagonaal van het scherm's. Voor de eenvoud groepeert Android alle werkelijke schermgroottes in vier algemene maten: klein, normaal, groot, en extra-groot.

Schermdichtheid
Het aantal pixels binnen een fysiek gebied van het scherm; meestal aangeduid als dpi (dots per inch). Bijvoorbeeld, een "low" density scherm heeft minder pixels binnen een bepaald fysiek gebied, vergeleken met een "normaal" of "hoge" dichtheidsscherm. Voor de eenvoud, Android groepeert alle werkelijke scherm dichtheden in zes algemene dichtheden: laag, medium, hoog, extra-hoog, extra-extra-hoog, en extra-extra-extra-hoog.

Orientation
De oriëntatie van het scherm vanuit het oogpunt van de gebruiker's standpunt. Dit is ofwel landschap of portret, wat betekent dat het scherm's beeldverhouding respectievelijk breed of hoog is. Wees ervan bewust dat niet alleen verschillende apparaten werken in verschillende oriëntaties door standaard, maar de oriëntatie kan tijdens runtime veranderen als de gebruiker het apparaat draait.

Resolution
Het totale aantal fysieke pixels op een scherm. Bij het toevoegen van ondersteuning voor meerdere schermen, werken applicaties niet direct werken met resolutie; applicaties moeten zich bezighouden alleen met schermgrootte en dichtheid, zoals gespecificeerd door de gegeneraliseerde grootte en dichtheid groepen.

Dichtheidsonafhankelijke pixel (dp)
Een virtuele pixeleenheid die u moet gebruiken bij het definiëren van UI layout, om om opmaakafmetingen of -posities op een dichtheidsonafhankelijke manier uit te drukken. De dichtheidsonafhankelijke pixel is gelijk aan één fysieke pixel op een 160 dpi scherm, wat de basis dichtheid is die het systeem aanneemt voor een "medium" dichtheidsscherm. Tijdens runtime, handelt het systeem transparant schaling van de dp eenheden, indien nodig, gebaseerd op de werkelijke dichtheid van het scherm in gebruik. De conversie van dp eenheden naar scherm pixels is eenvoudig: px = dp * (dpi / 160). Bijvoorbeeld, op een 240 dpi scherm, is 1 dp gelijk aan 1.5 fysieke pixels. U moet altijd dp eenheden gebruiken wanneer het definiëren van uw applicatie's UI, om te zorgen voor een goede weergave van uw UI op schermen met verschillende dichtheden.

Als je serieus bent over het ontwikkelen van een Android app voor meer dan een type apparaat, moet u hebben gelezen van de schermen ondersteuning ontwikkeling document ten minste een keer. Daarnaast is het altijd een goede zaak om te weten het werkelijke aantal actieve apparaten die een bepaalde schermconfiguratie hebben.

  • Schermgroottes en dichtheden]2
Commentaren (5)

Ik zal nader ingaan op hoe dp precies wordt omgezet in px:

  • Als het draait op een mdpi apparaat, zal een 150 x 150 px afbeelding 150 * 150 dp schermruimte innemen.
  • Als het draait op een hdpi apparaat, zal een 150 x 150 px afbeelding 100 * 100 dp schermruimte innemen.
  • Als het draait op een xhdpi apparaat, zal een 150x150 px beeld 75 * 75 dp schermruimte innemen.

Andersom: stel, je wilt een afbeelding toevoegen aan je applicatie en je hebt het nodig om een 100 * 100 dp control te vullen. U'zult verschillende grootte afbeeldingen moeten maken voor ondersteunde schermgroottes:

  • 100 * 100 px afbeelding voor mdpi
  • 150 * 150 px afbeelding voor hdpi
  • 200 * 200 px afbeelding voor xhdpi
Commentaren (4)