dp (density-independent pixel) — Android-də UI elementlərinin müxtəlif piksel sıxlığı olan ekranlarda eyni fiziki ölçüdə göstərilməsini təmin edən ölçü vahidini izah edirik. Bir dp həmişə ekranda 1/160 düymə bərabərdir, cihazın yüksək və ya aşağı qətnamədən asılı olmayaraq. Google Material Design (2025) məlumatına görə, Android tətbiqlərində bütün ölçülər dp ilə verilməlidir, px ilə deyil, əks halda interfeys müxtəlif cihazlarda fərqli görünəcək.
Əsas məqamlar
dp (density-independent pixel) — müxtəlif piksel sıxlığı olan cihazlarda UI elementlərinin ölçülərini vahidləşdirmək üçün Android-də tətbiq edilən virtual ölçü vahididir. Bir dp təxminən 160 dpi (mdpi) sıxlığı olan ekranda bir fiziki pikselə bərabərdir. 320 dpi (xhdpi) sıxlığı olan ekranda 1 dp 2 fiziki pikselə bərabər olacaq. Beləliklə, elementin fiziki ölçüsü ekranda eyni qalır — təxminən 1/160 düym. Android Developers (2025) məlumatına görə, dp layout, padding, margin və view-lərin eni/hündürlüyü üçün istifadə edilməli olan yeganə ölçü vahididir.
Düyməyə 160 px en təyin etsəniz, mdpi ekranında eni 1 düym, xxxhdpi ekranında (640 dpi) isə cəmi 0.25 düym olacaq. dp bu problemi həll edir: 160 dp istənilən ekranda 1 düymə bərabər olacaq. Android render zamanı DisplayMetrics.density vasitəsilə dp-ni avtomatik olaraq px-ə çevirir. Android Developer Blog (2025) məlumatına görə, dp tətbiq edilməzdən əvvəl (Android 1.0) proqramçılar əl ilə px hesablayırdılar, bu da port etmə zamanı daimi xətalar yaradırdı.
dp, px və sp — Android-də üç ölçü vahidi, hər birinin öz məqsədi var. px — ekranın sıxlıqdan asılı olan fiziki pikseli. dp — element ölçüləri üçün sıxlıqdan asılı olmayan piksel. sp — şrift ölçüsünün sistem tənzimləmələrini də nəzərə alan miqyasdan asılı olmayan piksel. Material Design (2025) məlumatına görə, dp və sp arasındakı fərq əlçatanlığın əsas aspektidir: zəif görmə qabiliyyəti olan istifadəçilər şrifti böyüdür və sp dəyərləri avtomatik uyğunlaşır, dp isə yox.
| Vahid | Tam adı | Sıxlığı nəzərə alır | Şrift tənzimləmələrini nəzərə alır | Tətbiq |
|---|---|---|---|---|
| px | Pixel | Xeyr | Xeyr | Tövsiyə edilmir |
| dp | Density-independent Pixel | Bəli | Xeyr | Layout, padding, margin |
| sp | Scale-independent Pixel | Bəli | Bəli | Mətn ölçüsü |
dp-ni px-ə çevirmə düsturu: px = dp × (dpi / 160). Əks çevirmə üçün: dp = px / (dpi / 160). density — Android-in DisplayMetrics əsasında hesabladığı dpi / 160 nisbətidir. mdpi-də density = 1.0, hdpi-də = 1.5, xhdpi-də = 2.0, xxhdpi-də = 3.0, xxxhdpi-də = 4.0. Beləliklə, 48 dp pikseldə: mdpi-də — 48 px, xxhdpi-də — 144 px. Google I/O 2024 məlumatına görə, bu düstur iOS pt (points)-ni dp-yə təxmini çevirmək üçün istifadə edilə bilər — 1 pt ≈ 1 dp.
| Bucket | Density | dpi dəyəri | 48 dp px-də | 16 dp px-də |
|---|---|---|---|---|
| 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/ qovluğunda yerləşən, bütün ölçüləri dp (və mətn üçün sp) ilə saxlamaq üçün nəzərdə tutulmuş Android resurs faylı. Ölçülərin dimens.xml-də mərkəzləşdirilməsi texniki xidməti asanlaşdırır: dimens.xml-də bir dəyərin dəyişdirilməsi tətbiqin bütün ekranlarında ölçünü yeniləyir. Müxtəlif sıxlıqlar üçün kvalifikasiya edilmiş dimens.xml faylları yaradıla bilər (values-hdpi, values-xhdpi). Android Jetpack Docs (2025) məlumatına görə, Google dimens.xml-də boşluqlar (margin, padding), element genişlikləri (sabitlər), avatar ölçüləri və toolbar hündürlüyünü saxlamağı tövsiyə edir.
<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 hər dimen ad və dəyərə malikdir. XML fayllarında istifadə: @dimen/avatar_size. Material Design Guidelines (2025) məlumatına görə, Android-də əsas şəbəkə addımı 8 dp-dir (8-point grid). Bütün boşluqlar, element ölçüləri və məsafələr 8 dp-yə qat olmalıdır: 8, 16, 24, 32, 48, 56, 64, 72 dp. Mətn üçün addım 4 sp-dir.
XML layout fayllarında dp birbaşa istifadə olunur: android:layout_width="48dp". Proqram kodunda (Kotlin/Java) TypedResource və ya genişləndirmə funksiyaları vasitəsilə dp-ni px-ə çevirmək lazımdır. TypedResource icra zamanı dp ilə işləmək üçün hazır metodlar təqdim edir: getDimensionPixelSize() tam px ədədi qaytarır. Jetpack Compose-da dp modifikatorlarda və layout konteynerlərində standart ölçü vahididir.
// Dp-ni px-ə proqram konvertasiyası
fun Context.dpToPx(dp: Int): Int {
return (dp * resources
.displayMetrics
.density).toInt()
}
// Activity-də istifadə
val paddingPx = dpToPx(16)
button.setPadding(
paddingPx,
paddingPx,
paddingPx,
paddingPx,
)
// Jetpack Compose: dp daxili vahid kimi
Modifier
.padding(16.dp)
.size(48.dp)
Bu nümunədə dpToPx() — displayMetrics.density istifadə edərək dp-ni px-ə çevirən Context üçün genişləndirmə funksiyası. Jetpack Compose-da dp tip sisteminə daxil edilib və əl ilə çevirmə tələb etmir — kompilyator render mərhələsində dp-ni avtomatik olaraq px-ə çevirir.
<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-də dp rəqəmə şəkilçi kimi əlavə edilir — margin_top="16dp". Mətn üçün sp istifadə olunur — textSize="@dimen/text_size_body". @dimen istinadı dəyərləri mərkəzləşdirilmiş şəkildə idarə etməyə imkan verir. En üçün match_parent və hündürlük üçün 48dp istifadəsi Material Design düymələri üçün standart nümunədir.
Google Play Console (2025) tərəfindən Android tətbiqlərinin təhlilinə görə, ən çox yayılmış beş səhv: XML fayllarında dp əvəzinə px istifadəsi, dimens.xml-in olmaması (dəyərlərin inline yazılması), kodda dp-ni px-ə səhv çevirmə (tam bölmədən istifadə), mətn üçün sp-nin nəzərə alınmaması və sp vasitəsilə şrift ölçüsünün sistem tənzimləmələrinin nəzərə alınmaması. Tam bölmə ən təhlükəli səhvdir: Kotlin-də val px = dp * density — əgər dp və density Int tipindədirsə, nəticə də Int olacaq və dəqiqlik itəcək.
Tez-tez verilən suallar
Android-də dp və iOS-də pt (points) — ekvivalent ölçü vahidləridir. Android-də 1 dp təxminən iOS-də 1 pt-ə bərabərdir. Hər iki anlayış sıxlıqdan asılı olmayan nöqtələri təsvir edir: aşağı sıxlıqlı köhnə cihazlarda 1 dp/pt = 1 px, müasirlərində — 2-4 px. Baza dəyərində fərq: Android əsas sıxlıq olaraq 160 dpi, iOS isə 163 dpi istifadə edir, bu da 2%-dən az xəta verir.
Jetpack Compose-da çevirmə tələb olunmur — dp tip sisteminə daxil edilib. Bütün modifikatorlar və layoutlar Dp qəbul edir, px yox. Əgər dp-dən px əldə etmək lazımdırsa, density istifadə edin: val px = with(LocalDensity.current) { 16.dp.toPx() }. LocalDensity cihaz ekranının sıxlığını nəzərə alan çevirmə əmsalını təqdim edir.
dp — Android terminidir. iOS-də analoq pt (points)-dir. Swift ekran sıxlığından asılı olmayan nöqtələrlə avtomatik işləyir. UIKit və SwiftUI-də bütün ölçülər nöqtələrlə verilir, sistem isə onları ekranın scale factor (UIScreen.main.scale) vasitəsilə px-ə çevirir. Prinsip eynidir, adı fərqlidir.
Xülasə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun