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) — 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.
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 — 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.
| Birlik | To'liq nomi | Zichlikni hisobga oladi | Shrift sozlamalarini hisobga oladi | Qo'llanilishi |
|---|---|---|---|---|
| px | Pixel | Yo'q | Yo'q | Tavsiya etilmaydi |
| dp | Density-independent Pixel | Ha | Yo'q | Layout, padding, margin |
| sp | Scale-independent Pixel | Ha | Ha | Matn o'lchami |
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.
| Bucket | Density | dpi qiymati | 48 dp px da | 16 dp px da |
|---|---|---|---|---|
| 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 — 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.
<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.
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.
// 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.
<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.
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.
Tez-tez beriladigan savollar
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 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.
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
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.