dp — basis, dichtheidsonafhankelijke pixels in Android

Auteur: IT Sectr Gepubliceerd: 2026-02-25 Leestijd: 7 min

We leggen de basis van dp (density-independent pixel) uit — de meeteenheid in Android die zorgt voor een gelijke fysieke grootte van UI-elementen op schermen met verschillende pixeldichtheid. Eén dp komt altijd overeen met 1/160 inch op het scherm, ongeacht of het apparaat een hoge of lage resolutie heeft. Volgens Google Material Design (2025) moeten alle afmetingen in Android-apps in dp worden opgegeven, niet in px, anders ziet de interface er anders uit op verschillende apparaten.

Belangrijkste

  • dp (density-independent pixel) — abstracte meeteenheid in Android, gelijk aan 1/160 inch op het scherm.
  • Conversieformule: px = dp × (dpi / 160). Op mdpi-scherm 1 dp = 1 px, op xxhdpi 1 dp = 3 px.
  • Alle afmetingen in XML (layout_width, padding, margin) worden in dp opgegeven.
  • dimens.xml — Android resourcebestand voor gecentraliseerde opslag van dp-waarden.
  • Volgens Google Android Performance Guide (2025) elimineert het gebruik van dp in plaats van px 90% van de aanpassingsproblemen van de interface op verschillende schermen.

Wat is dp in Android?

dp (density-independent pixel) — is een virtuele meeteenheid in Android, geïntroduceerd om de afmetingen van UI-elementen op apparaten met verschillende pixeldichtheid te uniformeren. Eén dp is ongeveer gelijk aan één fysieke pixel op een scherm met een dichtheid van 160 dpi (mdpi). Op een scherm met een dichtheid van 320 dpi (xhdpi) is 1 dp gelijk aan 2 fysieke pixels. Zo blijft de fysieke grootte van het element op het scherm hetzelfde — ongeveer 1/160 inch. Volgens Android Developers (2025) is dp de enige meeteenheid die moet worden gebruikt voor layout, padding, margin en breedte/hoogte van views.

Waarom px niet kan worden gebruikt

Als u een knop een breedte van 160 px geeft, is deze op een mdpi-scherm 1 inch breed en op een xxxhdpi-scherm (640 dpi) — slechts 0.25 inch. dp lost dit probleem op: 160 dp is op elk scherm gelijk aan 1 inch. Android converteert automatisch dp naar px via DisplayMetrics.density bij het renderen. Volgens Android Developer Blog (2025) gebruikten ontwikkelaars vóór de introductie van dp (Android 1.0) handmatig px, wat leidde tot constante fouten bij het porteren.

dp, px en sp: wat is het verschil

dp, px en sp — drie meeteenheden in Android, elk met een eigen doel. px — de fysieke pixel van het scherm, afhankelijk van de dichtheid. dp — dichtheidsonafhankelijke pixel voor elementafmetingen. sp — scale-independent pixel voor tekst, die ook rekening houdt met systeeminstellingen voor lettergrootte. Volgens Material Design (2025) is het verschil tussen dp en sp een belangrijk toegankelijkheidsaspect: gebruikers met slecht zicht vergroten het lettertype en sp-waarden passen zich automatisch aan, terwijl dp — niet.

EenheidVolledige naamHoudt rekening met dichtheidHoudt rekening met lettertype-instellingenToepassing
pxPixelNeeNeeNiet aanbevolen
dpDensity-independent PixelJaNeeLayout, padding, marges
spScale-independent PixelJaJaTekstgrootte

Formule voor conversie van dp naar px en terug

Conversieformule dp naar px: px = dp × (dpi / 160). Voor omgekeerde conversie: dp = px / (dpi / 160). density — de verhouding dpi / 160, die Android berekent op basis van DisplayMetrics. Op mdpi density = 1.0, op hdpi = 1.5, op xhdpi = 2.0, op xxhdpi = 3.0, op xxxhdpi = 4.0. Dus 48 dp in pixels: op mdpi — 48 px, op xxhdpi — 144 px. Volgens Google I/O 2024 kan deze formule worden gebruikt voor de geschatte conversie van iOS pt (points) naar dp — 1 pt ≈ 1 dp.

BucketDensitydpi waarde48 dp in px16 dp in px
mdpi1.01604816
hdpi1.52407224
xhdpi2.03209632
xxhdpi3.048014448
xxxhdpi4.064019264

dimens.xml: gecentraliseerd beheer van afmetingen

dimens.xml — het Android resourcebestand in res/values/, bedoeld voor het opslaan van alle afmetingen in dp (en sp voor tekst). Centralisatie van afmetingen in dimens.xml vereenvoudigt het onderhoud: het wijzigen van één waarde in dimens.xml werkt de afmeting bij op alle schermen van de app. Er kunnen gekwalificeerde dimens.xml-bestanden worden gemaakt voor verschillende dichtheden (values-hdpi, values-xhdpi). Volgens Android Jetpack Docs (2025) raadt Google aan om in dimens.xml spaties (margin, padding), elementbreedtes (constanten), avatarafmetingen en toolbarhoogte op te slaan.

XML


<resources>
    <dimen name="margin_small">8dp</dimen>
    <dimen name="margin_medium">16dp</dimen>
    <dimen name="margin_large">24dp</dimen>
    <dimen name="avatar_size">48dp</dimen>
    <dimen name="toolbar_height">56dp</dimen>
    <dimen name="text_size_body">14sp</dimen>
    <dimen name="icon_size_small">24dp</dimen>
</resources>

In dit bestand heeft elke dimen een naam en waarde. Gebruik in XML-bestanden: @dimen/avatar_size. Volgens Material Design Guidelines (2025) is de basisstap van het raster in Android 8 dp (8-point grid). Alle spaties, elementafmetingen en afstanden moeten een veelvoud zijn van 8 dp: 8, 16, 24, 32, 48, 56, 64, 72 dp. Voor tekst is de stap 4 sp.

Programmatisch gebruik van dp in Kotlin en XML

In XML-bestanden wordt dp direct gebruikt: android:layout_width="48dp". In programmacode (Kotlin/Java) moet dp worden geconverteerd naar px met behulp van TypedResource of extensiefuncties. TypedResource biedt kant-en-klare methoden voor het werken met dp tijdens runtime: getDimensionPixelSize() retourneert een geheel getal px. In Jetpack Compose is dp de standaard meeteenheid in modifiers en layoutcontainers.

Kotlin
// Conversie van dp naar px programmatisch
fun Context.dpToPx(dp: Int): Int {
    return (dp * resources
        .displayMetrics
        .density).toInt()
}

// Gebruik in Activity
val paddingPx = dpToPx(16)
button.setPadding(
    paddingPx,
    paddingPx,
    paddingPx,
    paddingPx,
)

// Jetpack Compose: dp als ingebouwde eenheid
Modifier
    .padding(16.dp)
    .size(48.dp)

In dit voorbeeld is dpToPx() — een extensiefunctie voor Context, die dp naar px converteert met behulp van displayMetrics.density. In Jetpack Compose is dp ingebouwd in het typesysteem en vereist het geen handmatige conversie — de compiler vertaalt automatisch dp naar px in de renderfase.

XML-bestanden met dp

XML

<Button
    android:layout_width="match_parent"
    android:layout_height="48dp"
    android:padding="@dimen/margin_medium"
    android:textSize="@dimen/text_size_body"
    android:text="@string/button_label"
    android:layout_marginTop="16dp"
/>

In XML wordt dp als achtervoegsel aan het getal toegevoegd — margin_top="16dp". Voor tekst wordt sp gebruikt — textSize="@dimen/text_size_body". De verwijzing @dimen maakt gecentraliseerd beheer van waarden mogelijk. Het gebruik van match_parent voor breedte en 48dp voor hoogte is een standaard Material Design patroon voor knoppen.

Typische fouten bij het gebruik van dp

Volgens een analyse van Android-apps door Google Play Console (2025) zijn de vijf meest voorkomende fouten: het gebruik van px in plaats van dp in XML-bestanden, het ontbreken van dimens.xml (waarden inline geschreven), onjuiste conversie van dp naar px in code (gebruik van gehele deling), het negeren van sp voor tekst en het geen rekening houden met systeeminstellingen voor lettergrootte via sp. Gehele deling is de gevaarlijkste fout: in Kotlin val px = dp * density — als dp en density Int zijn, zal het resultaat ook Int zijn en gaat de precisie verloren.

  • px in plaats van dp — de app ziet er anders uit op apparaten met verschillende dichtheid. Oplossing: vervang px door dp in XML.
  • Inline waarden — afmetingen direct in layout-bestanden geschreven. Duplicatie van waarden bemoeilijkt onderhoud en updates.
  • sp voor tekst — het gebruik van dp voor lettergrootte negeert gebruikersinstellingen en schendt de toegankelijkheid.
  • Gehele deling — in Kotlin geeft deling van Int door Int een Int, waarbij het breukdeel verloren gaat. Gebruik altijd Float.

Veelgestelde vragen

Waarin verschilt dp van pt in iOS?

dp in Android en pt (points) in iOS — zijn equivalente meeteenheden. 1 dp in Android is ongeveer gelijk aan 1 pt in iOS. Beide concepten beschrijven dichtheidsonafhankelijke punten: op oudere apparaten met lage dichtheid is 1 dp/pt = 1 px, op moderne — 2-4 px. Het verschil in basiswaarde: Android gebruikt 160 dpi als basisdichtheid, iOS — 163 dpi, wat een fout van minder dan 2% geeft.

Hoe converteer je dp naar px in Jetpack Compose?

In Jetpack Compose is conversie niet nodig — dp is ingebouwd in het typesysteem. Alle modifiers en layouts accepteren Dp, niet px. Als u px uit dp moet halen, gebruikt u density: val px = with(LocalDensity.current) { 16.dp.toPx() }. LocalDensity biedt de conversiefactor die rekening houdt met de dichtheid van het apparaatscherm.

Moet ik dp gebruiken in iOS?

dp — een Android-term. In iOS is het equivalent pt (points). Swift werkt automatisch met punten die niet afhankelijk zijn van de schermdichtheid. In UIKit en SwiftUI worden alle afmetingen in punten opgegeven en het systeem converteert ze naar px met behulp van de scale factor van het scherm (UIScreen.main.scale). Het principe is hetzelfde, de naam is anders.

Samenvatting

  • dp — Density-independent Pixel, abstracte eenheid voor UI-afmetingen in Android, gelijk aan 1/160 inch.
  • Formule: px = dp × (dpi / 160). Op mdpi 1 dp = 1 px, op xxhdpi 1 dp = 3 px.
  • Alle afmetingen in XML-bestanden moeten in dp worden opgegeven, tekstgrootte — in sp.
  • dimens.xml — gecentraliseerde opslag van afmetingen. Eén wijziging werkt de hele interface bij.
  • 8-point grid: alle afmetingen zijn veelvouden van 8 dp, tekstspaties — 4 sp.
  • Gebruik in programmacode TypedResource of extensiefuncties voor conversie van dp naar px.

We ontwikkelen een mobiele applicatie turnkey

IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.

Bespreek het project

Lees ook