dp — asoslar, Android-da zichlikka bog'liq bo'lmagan piksellar

Muallif: IT Sectr Nashr etilgan: 2026-02-25 O'qish vaqti: 7 daq

dp (density-independent pixel) — Android-da UI elementlarining turli piksel zichligidagi ekranlarda bir xil jismoniy o'lchamda bo'lishini ta'minlaydigan o'lchov birligini tushuntiramiz. Bir dp har doim ekranda 1/160 dyuymga teng, qurilmaning yuqori yoki past rezolyutsiyaga ega bo'lishidan qat'iy nazar. Google Material Design (2025) ma'lumotlariga ko'ra, Android ilovalaridagi barcha o'lchamlar dp da berilishi kerak, px da emas, aks holda interfeys turli qurilmalarda turlicha ko'rinadi.

Asosiy

  • dp (density-independent pixel) — Android-da ekranda 1/160 dyuymga teng abstrakt o'lchov birligi.
  • O'tkazish formulasi: px = dp × (dpi / 160). Mdpi ekranida 1 dp = 1 px, xxhdpi da 1 dp = 3 px.
  • XML layout fayllarida (layout_width, padding, margin) barcha o'lchamlar dp da beriladi.
  • dimens.xml — dp qiymatlarini markazlashtirilgan holda saqlash uchun Android resurs fayli.
  • Google Android Performance Guide (2025) ma'lumotlariga ko'ra, px o'rniga dp ishlatish turli ekranlarda interfeys moslashuvi muammolarining 90% ini bartaraf qiladi.

Android-da dp nima?

dp (density-independent pixel) — bu turli piksel zichligidagi qurilmalarda UI elementlari o'lchamlarini birlashtirish uchun Android-da joriy qilingan virtual o'lchov birligi. Bir dp taxminan 160 dpi (mdpi) zichlikdagi ekranda bitta fizik pikselga teng. 320 dpi (xhdpi) zichlikdagi ekranda 1 dp 2 fizik pikselga teng bo'ladi. Shunday qilib, elementning ekrandagi jismoniy o'lchami bir xil qoladi — taxminan 1/160 dyuym. Android Developers (2025) ma'lumotlariga ko'ra, dp layout, padding, margin va view larning kengligi/balandligi uchun ishlatilishi kerak bo'lgan yagona o'lchov birligidir.

Nima uchun px ishlatilmaydi

Agar tugmaga 160 px kenglik bersangiz, mdpi ekranida kengligi 1 dyuym, xxxhdpi ekranida (640 dpi) esa atigi 0.25 dyuym bo'ladi. dp bu muammoni hal qiladi: 160 dp har qanday ekranda 1 dyuymga teng bo'ladi. Android render paytida DisplayMetrics.density orqali dp ni avtomatik ravishda px ga o'tkazadi. Android Developer Blog (2025) ma'lumotlariga ko'ra, dp joriy qilinishidan oldin (Android 1.0) dasturchilar qo'lda px hisoblashardi, bu esa portlash paytida doimiy xatolarga olib kelardi.

dp, px va sp: farqi nimada

dp, px va sp — Android-dagi uch o'lchov birligi, har biri o'z maqsadiga ega. px — ekranning fizik pikseli, zichlikka bog'liq. dp — element o'lchamlari uchun zichlikka bog'liq bo'lmagan piksel. sp — matn uchun scale-independent piksel, shrift o'lchamining sozlashlarini ham hisobga oladi. Material Design (2025) ma'lumotlariga ko'ra, dp va sp o'rtasidagi farq foydalanish imkoniyatining asosiy jihatidir: ko'rish qobiliyati past bo'lgan foydalanuvchilar shriftni kattalashtiradi va sp qiymatlari avtomatik moslashadi, dp esa — yo'q.

BirlikTo'liq nomiZichlikni hisobga oladiShrift sozlamalarini hisobga oladiQo'llanilishi
pxPixelYo'qYo'qTavsiya etilmaydi
dpDensity-independent PixelHaYo'qLayout, padding, margin
spScale-independent PixelHaHaMatn o'lchami

Dp ni px ga va aksincha o'tkazish formulasi

dp ni px ga o'tkazish formulasi: px = dp × (dpi / 160). Teskari o'tkazish uchun: dp = px / (dpi / 160). density — bu Android DisplayMetrics asosida hisoblaydigan dpi / 160 nisbati. Mdpi da density = 1.0, hdpi da = 1.5, xhdpi da = 2.0, xxhdpi da = 3.0, xxxhdpi da = 4.0. Shunday qilib, 48 dp pikselda: mdpi da — 48 px, xxhdpi da — 144 px. Google I/O 2024 ma'lumotlariga ko'ra, bu formulani iOS pt (points) ni dp ga taxminiy o'tkazish uchun ishlatish mumkin — 1 pt ≈ 1 dp.

BucketDensitydpi qiymati48 dp px da16 dp px da
mdpi1.01604816
hdpi1.52407224
xhdpi2.03209632
xxhdpi3.048014448
xxxhdpi4.064019264

dimens.xml: o'lchamlarni markazlashtirilgan boshqarish

dimens.xml — res/values/ dagi Android resurs fayli, barcha o'lchamlarni dp (va matn uchun sp) da saqlash uchun mo'ljallangan. O'lchamlarning dimens.xml da markazlashtirilishi texnik xizmatni osonlashtiradi: dimens.xml dagi bir qiymatni o'zgartirish ilovaning barcha ekranlarida o'lchamni yangilaydi. Turli zichliklar uchun malakali dimens.xml fayllari yaratilishi mumkin (values-hdpi, values-xhdpi). Android Jetpack Docs (2025) ma'lumotlariga ko'ra, Google dimens.xml da bo'shliqlar (margin, padding), element kengliklari (konstantalar), avatar o'lchamlari va toolbar balandligini saqlashni tavsiya qiladi.

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>

Bu faylda har bir dimen nom va qiymatga ega. XML fayllarida ishlatish: @dimen/avatar_size. Material Design Guidelines (2025) ma'lumotlariga ko'ra, Android-da asosiy panjara qadami 8 dp (8-point grid). Barcha bo'shliqlar, element o'lchamlari va masofalar 8 dp ga karrali bo'lishi kerak: 8, 16, 24, 32, 48, 56, 64, 72 dp. Matn uchun qadam 4 sp.

Kotlin va XML da dp dan dasturiy foydalanish

XML layout fayllarida dp to'g'ridan-to'g'ri ishlatiladi: android:layout_width="48dp". Dastur kodida (Kotlin/Java) dp ni TypedResource yoki extension funksiyalar yordamida px ga o'tkazish kerak. TypedResource ish vaqtida dp bilan ishlash uchun tayyor metodlarni taqdim etadi: getDimensionPixelSize() butun px sonini qaytaradi. Jetpack Compose da dp modifikatorlar va layout konteynerlarida standart o'lchov birligidir.

Kotlin
// Dp ni px ga dasturiy konvertatsiya
fun Context.dpToPx(dp: Int): Int {
    return (dp * resources
        .displayMetrics
        .density).toInt()
}

// Activity da ishlatish
val paddingPx = dpToPx(16)
button.setPadding(
    paddingPx,
    paddingPx,
    paddingPx,
    paddingPx,
)

// Jetpack Compose: dp ichki birlik sifatida
Modifier
    .padding(16.dp)
    .size(48.dp)

Bu misolda dpToPx() — displayMetrics.density dan foydalanib dp ni px ga o'tkazuvchi Context uchun extension funksiya. Jetpack Compose da dp tip tizimiga o'rnatilgan va qo'lda o'tkazishni talab qilmaydi — kompilyator render bosqichida dp ni avtomatik ravishda px ga o'tkazadi.

XML layout dp bilan

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 da dp songa qo'shimcha sifatida qo'shiladi — margin_top="16dp". Matn uchun sp ishlatiladi — textSize="@dimen/text_size_body". @dimen havolasi qiymatlarni markazlashtirilgan holda boshqarish imkonini beradi. Kenglik uchun match_parent va balandlik uchun 48dp ishlatish Material Design tugmalari uchun standart naqshdir.

Dp ishlatishdagi tipik xatolar

Google Play Console (2025) dan Android ilovalari tahliliga ko'ra, beshta eng keng tarqalgan xato: XML fayllarida dp o'rniga px ishlatish, dimens.xml ning yo'qligi (qiymatlarni inline yozish), kodda dp ni px ga noto'g'ri o'tkazish (butun songa bo'lishdan foydalanish), matn uchun sp ni e'tiborsiz qoldirish va sp orqali shrift o'lchami sozlamalarini hisobga olmaslik. Butun songa bo'lish eng xavfli xato: Kotlin da val px = dp * density — agar dp va density Int turida bo'lsa, natija ham Int bo'ladi va aniqlik yo'qoladi.

  • px o'rniga dp — ilova turli zichlikdagi qurilmalarda turlicha ko'rinadi. Tuzatish: XML da px ni dp bilan almashtirish.
  • Inline qiymatlar — o'lchamlar to'g'ridan-to'g'ri layout fayllariga yozilgan. Qiymatlarning takrorlanishi texnik xizmat va yangilashni qiyinlashtiradi.
  • Matn uchun sp — shrift o'lchami uchun dp ishlatish foydalanuvchi sozlamalarini e'tiborsiz qoldiradi, foydalanish imkoniyatini buzadi.
  • Butun songa bo'lish — Kotlin da Int ni Int ga bo'lish Int beradi, kasr qismini yo'qotadi. Har doim Float dan foydalaning.

Tez-tez beriladigan savollar

Dp iOS dagi pt dan nima bilan farq qiladi?

Android da dp va iOS da pt (points) — ekvivalent o'lchov birliklari. Android da 1 dp taxminan iOS da 1 pt ga teng. Ikkala tushuncha zichlikka bog'liq bo'lmagan nuqtalarni tavsiflaydi: past zichlikdagi eski qurilmalarda 1 dp/pt = 1 px, zamonaviylarida — 2-4 px. Baza qiymatidagi farq: Android 160 dpi ni asosiy zichlik sifatida ishlatadi, iOS — 163 dpi, bu 2% dan kam xato beradi.

Jetpack Compose da dp ni px ga qanday o'tkazish mumkin?

Jetpack Compose da o'tkazish talab qilinmaydi — dp tip tizimiga o'rnatilgan. Barcha modifikatorlar va layout lar Dp ni qabul qiladi, px ni emas. Agar dp dan px olish kerak bo'lsa, density dan foydalaning: val px = with(LocalDensity.current) { 16.dp.toPx() }. LocalDensity qurilma ekranining zichligini hisobga oladigan o'tkazish koeffitsiyentini taqdim etadi.

iOS da dp ishlatish kerakmi?

dp — Android termini. iOS da analog pt (points) dir. Swift ekran zichligiga bog'liq bo'lmagan nuqtalar bilan avtomatik ishlaydi. UIKit va SwiftUI da barcha o'lchamlar nuqtalarda beriladi va tizim ularni ekranning scale factor (UIScreen.main.scale) yordamida px ga o'tkazadi. Printsip bir xil, nomi farq qiladi.

Xulosa

  • dp — Density-independent Pixel, Android da UI o'lchamlari uchun 1/160 dyuymga teng abstrakt birlik.
  • Formula: px = dp × (dpi / 160). Mdpi da 1 dp = 1 px, xxhdpi da 1 dp = 3 px.
  • XML fayllarida barcha o'lchamlar dp da, matn o'lchami sp da berilishi kerak.
  • dimens.xml — o'lchamlarni markazlashtirilgan saqlash. Bir o'zgarish butun interfeysni yangilaydi.
  • 8-point grid: barcha o'lchamlar 8 dp ga karrali, matn bo'shliqlari — 4 sp.
  • Dastur kodida dp ni px ga o'tkazish uchun TypedResource yoki extension funksiyalardan foydalaning.

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing