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) — 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.
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 — 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ég | Teljes név | Figyelembe veszi a sűrűséget | Figyelembe veszi a betűméret beállításokat | Alkalmazás |
|---|---|---|---|---|
| px | Pixel | Nem | Nem | Nem ajánlott |
| dp | Density-independent Pixel | Igen | Nem | Layout, padding, margók |
| sp | Scale-independent Pixel | Igen | Igen | Szöveg mérete |
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.
| Bucket | Density | dpi érték | 48 dp px-ben | 16 dp px-ben |
|---|---|---|---|---|
| mdpi | 1.0 | 160 | 48 | 16 |
| hdpi | 1.5 | 240 | 72 | 24 |
| xhdpi | 2.0 | 320 | 96 | 32 |
| xxhdpi | 3.0 | 480 | 144 | 48 |
| xxxhdpi | 4.0 | 640 | 192 | 64 |
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.
<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.
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.
// 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.
<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.
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.
Gyakran Ismételt Kérdések
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.
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.
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
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.
Olvassa el is