dp — alapok, sűrűségfüggetlen pixelek Androidban

Szerző: IT Sectr Megjelenés: 2026-02-25 Olvasási idő: 7 perc

Elmagyarázzuk a dp (density-independent pixel) alapjait — az Android mértékegységét, amely biztosítja a UI-elemek azonos fizikai méretét a különböző pixelsűrűségű kijelzőkön. Egy dp mindig 1/160 hüvelyknek felel meg a képernyőn, függetlenül attól, hogy a készülék felbontása magas vagy alacsony. A Google Material Design (2025) szerint az Android alkalmazásokban minden méretet dp-ben kell megadni, nem px-ben, különben a felület eltérően fog kinézni a különböző eszközökön.

Főbb Pontok

  • dp (density-independent pixel) — absztrakt mértékegység Androidban, 1/160 hüvelyknek felel meg a képernyőn.
  • Konverziós képlet: px = dp × (dpi / 160). Mdpi képernyőn 1 dp = 1 px, xxhdpi-n 1 dp = 3 px.
  • Minden méret XML-ben (layout_width, padding, margin) dp-ben van megadva.
  • dimens.xml — Android erőforrásfájl a dp értékek központosított tárolására.
  • A Google Android Performance Guide (2025) szerint a dp használata px helyett 90%-kal kiküszöböli a felület adaptációs problémáit különböző képernyőkön.

Mi az a dp Androidban?

dp (density-independent pixel) — egy virtuális mértékegység Androidban, amelyet a UI-elemek méreteinek egységesítésére vezettek be a különböző pixelsűrűségű eszközökön. Egy dp megközelítőleg egy fizikai pixelnek felel meg 160 dpi (mdpi) sűrűségű képernyőn. 320 dpi (xhdpi) sűrűségű képernyőn 1 dp = 2 fizikai pixel. Így az elem fizikai mérete a képernyőn ugyanakkora marad — körülbelül 1/160 hüvelyk. Az Android Developers (2025) szerint a dp az egyetlen mértékegység, amelyet layout, padding, margin és nézet szélesség/magasság méretekhez használni kell.

Miért nem használható a px

Ha egy gomb szélességét 160 px-re állítja, mdpi képernyőn 1 hüvelyk széles lesz, xxxhdpi képernyőn (640 dpi) pedig csak 0,25 hüvelyk. dp megoldja ezt a problémát: 160 dp bármely képernyőn 1 hüvelyk lesz. Az Android automatikusan konvertálja a dp-t px-be a DisplayMetrics.density segítségével a renderelés során. Az Android Developer Blog (2025) szerint a dp bevezetése előtt (Android 1.0) a fejlesztők manuálisan számolták a px-eket, ami állandó hibákhoz vezetett portoláskor.

dp, px és sp: mi a különbség

dp, px és sp — három mértékegység Androidban, mindegyiknek saját célja van. px — a képernyő fizikai pixele, amely a sűrűségtől függ. dp — sűrűségfüggetlen pixel elemek méreteihez. sp — scale-independent pixel szöveghez, amely figyelembe veszi a betűméret rendszerbeállításait is. A Material Design (2025) szerint a dp és sp közötti különbség az akadálymentesítés kulcsfontosságú aspektusa: a gyenge látású felhasználók nagyítják a betűt, és az sp értékek automatikusan alkalmazkodnak, míg a dp — nem.

EgységTeljes névFigyelembe veszi a sűrűségetFigyelembe veszi a betűméret beállításokatAlkalmazás
pxPixelNemNemNem ajánlott
dpDensity-independent PixelIgenNemLayout, padding, margók
spScale-independent PixelIgenIgenSzöveg mérete

Képlet dp-ből px-be és vissza

dp-ből px-be konverziós képlet: px = dp × (dpi / 160). Fordított konverzióhoz: dp = px / (dpi / 160). density — a dpi / 160 arány, amelyet az Android a DisplayMetrics alapján számít ki. Mdpi-n density = 1.0, hdpi-n = 1.5, xhdpi-n = 2.0, xxhdpi-n = 3.0, xxxhdpi-n = 4.0. Így 48 dp pixelben: mdpi-n — 48 px, xxhdpi-n — 144 px. A Google I/O 2024 szerint ez a képlet használható az iOS pt (points) dp-be történő közelítő konvertálására — 1 pt ≈ 1 dp.

BucketDensitydpi érték48 dp px-ben16 dp px-ben
mdpi1.01604816
hdpi1.52407224
xhdpi2.03209632
xxhdpi3.048014448
xxxhdpi4.064019264

dimens.xml: központosított méretkezelés

dimens.xml — Android erőforrásfájl a res/values/ mappában, amely az összes méret dp-ben (és sp-ben szöveghez) történő tárolására szolgál. A méretek centralizálása a dimens.xml-ben egyszerűsíti a karbantartást: egy érték megváltoztatása a dimens.xml-ben frissíti a méretet az alkalmazás összes képernyőjén. Minősített dimens.xml fájlok hozhatók létre különböző sűrűségekhez (values-hdpi, values-xhdpi). Az Android Jetpack Docs (2025) szerint a Google a dimens.xml-ben tárolást javasol (margin, padding), elemek szélességét (konstansok), avatarméreteket és eszköztár magasságot.

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>

Ebben a fájlban minden dimen rendelkezik névvel és értékkel. Használat XML fájlokban: @dimen/avatar_size. A Material Design Guidelines (2025) szerint az alapháló lépésköze Androidban 8 dp (8-point grid). Minden távolság, elem méret és hézag 8 dp többszöröse kell legyen: 8, 16, 24, 32, 48, 56, 64, 72 dp. Szöveg esetén a lépés 4 sp.

A dp programozott használata Kotlinban és XML-ben

XML fájlokban a dp közvetlenül használatos: android:layout_width="48dp". Programkódban (Kotlin/Java) a dp-t px-be kell konvertálni a TypedResource vagy kiterjesztési függvények segítségével. TypedResource kész metódusokat biztosít a dp-vel való munkához futásidőben: getDimensionPixelSize() egész számú px-et ad vissza. Jetpack Compose-ban a dp a szabványos mértékegység a módosítókban és layout konténerekben.

Kotlin
// dp programozott konvertálása px-be
fun Context.dpToPx(dp: Int): Int {
    return (dp * resources
        .displayMetrics
        .density).toInt()
}

// Használat Activity-ben
val paddingPx = dpToPx(16)
button.setPadding(
    paddingPx,
    paddingPx,
    paddingPx,
    paddingPx,
)

// Jetpack Compose: dp beépített egységként
Modifier
    .padding(16.dp)
    .size(48.dp)

Ebben a példában dpToPx() — kiterjesztési függvény a Context számára, amely displayMetrics.density segítségével konvertálja a dp-t px-be. Jetpack Compose-ban a dp be van építve a típusrendszerbe, és nem igényel kézi konverziót — a fordító automatikusan fordítja a dp-t px-be a renderelési fázisban.

XML fájlok dp-vel

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"
/>

XML-ben a dp utótagként kerül a számhoz — margin_top="16dp". Szöveghez sp használatos — textSize="@dimen/text_size_body". A @dimen hivatkozás lehetővé teszi az értékek központosított kezelését. A match_parent használata szélességhez és 48dp magassághoz szabványos Material Design minta gombokhoz.

Tipikus hibák a dp használatakor

A Google Play Console (2025) Android alkalmazások elemzése szerint az öt leggyakoribb hiba: px használata dp helyett XML fájlokban, dimens.xml hiánya (értékek inline írva), dp helytelen konvertálása px-be kódban (egész osztás használata), sp figyelmen kívül hagyása szöveghez, és a betűméret rendszerbeállításainak figyelmen kívül hagyása sp-n keresztül. Egész osztás a legveszélyesebb hiba: Kotlinban val px = dp * density — ha dp és density Int típusú, az eredmény is Int lesz, és a pontosság elveszik.

  • px dp helyett — az alkalmazás eltérően néz ki különböző sűrűségű eszközökön. Javítás: px cseréje dp-re XML-ben.
  • Inline értékek — a méretek közvetlenül a layout fájlokba vannak írva. Az értékek duplikálása megnehezíti a karbantartást és frissítést.
  • sp szöveghez — a dp használata betűméretre figyelmen kívül hagyja a felhasználói beállításokat, megsértve az akadálymentesítést.
  • Egész osztás — Kotlinban Int osztása Int-tel Int-et ad, elveszítve a tört részt. Mindig használjon Float-ot.

Gyakran Ismételt Kérdések

Miben különbözik a dp a pt-től iOS-ben?

dp Androidban és pt (points) iOS-ben — egyenértékű mértékegységek. 1 dp Androidban megközelítőleg 1 pt-nek felel meg iOS-ben. Mindkét fogalom sűrűségfüggetlen pontokat ír le: régi, alacsony sűrűségű eszközökön 1 dp/pt = 1 px, modern eszközökön — 2-4 px. A különbség az alapértékben: Android 160 dpi-t használ alapsűrűségként, iOS — 163 dpi-t, ami kevesebb mint 2% hibát eredményez.

Hogyan lehet dp-t px-be konvertálni Jetpack Compose-ban?

Jetpack Compose-ban nincs szükség konverzióra — a dp be van építve a típusrendszerbe. Minden módosító és layout Dp-t fogad el, nem px-et. Ha px-et kell kapnia dp-ből, használja a density-t: val px = with(LocalDensity.current) { 16.dp.toPx() }. A LocalDensity biztosítja a konverziós tényezőt, amely figyelembe veszi a készülék képernyőjének sűrűségét.

Használni kell dp-t iOS-ben?

dp — Android kifejezés. iOS-ben a megfelelője a pt (points). A Swift automatikusan pontokkal dolgozik, amelyek nem függnek a képernyő sűrűségétől. UIKit-ben és SwiftUI-ben minden méret pontokban van megadva, és a rendszer átkonvertálja őket px-be a képernyő scale factor (UIScreen.main.scale) segítségével. Az elv ugyanaz, a név más.

Összegzés

  • dp — Density-independent Pixel, absztrakt egység a UI méretekhez Androidban, 1/160 hüvelyk.
  • Képlet: px = dp × (dpi / 160). Mdpi-n 1 dp = 1 px, xxhdpi-n 1 dp = 3 px.
  • Minden méretet XML fájlokban dp-ben kell megadni, a szöveg méretét — sp-ben.
  • dimens.xml — központosított mérettárolás. Egy változtatás frissíti a teljes felületet.
  • 8-point grid: minden méret 8 dp többszöröse, szöveg hézagok — 4 sp.
  • Programkódban használja a TypedResource-t vagy kiterjesztési függvényeket a dp px-be konvertálásához.

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is