dp — əsaslar, Android-də sıxlıqdan asılı olmayan piksellər

Müəllif: IT Sectr Dərc olunub: 2026-02-25 Oxuma vaxtı: 7 dəq

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) — Android-də ekranda 1/160 düymə bərabər olan abstrakt ölçü vahidi.
  • Çevirmə düsturu: px = dp × (dpi / 160). mdpi ekranında 1 dp = 1 px, xxhdpi-də 1 dp = 3 px.
  • XML layout fayllarında (layout_width, padding, margin) bütün ölçülər dp ilə verilir.
  • dimens.xml — dp dəyərlərini mərkəzləşdirilmiş şəkildə saxlamaq üçün Android resurs faylı.
  • Google Android Performance Guide (2025) məlumatına görə, px əvəzinə dp istifadəsi müxtəlif ekranlarda interfeys uyğunlaşdırma problemlərinin 90%-ni aradan qaldırır.

Android-də dp nədir?

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.

Niyə px istifadə etmək olmaz

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: fərq nədir

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.

VahidTam adıSıxlığı nəzərə alırŞrift tənzimləmələrini nəzərə alırTətbiq
pxPixelXeyrXeyrTövsiyə edilmir
dpDensity-independent PixelBəliXeyrLayout, padding, margin
spScale-independent PixelBəliBəliMətn ölçüsü

dp-ni px-ə və əksinə çevirmə düsturu

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.

BucketDensitydpi dəyəri48 dp px-də16 dp px-də
mdpi1.01604816
hdpi1.52407224
xhdpi2.03209632
xxhdpi3.048014448
xxxhdpi4.064019264

dimens.xml: ölçülərin mərkəzləşdirilmiş idarəsi

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.

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 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.

Kotlin və XML-də dp-nin proqram istifadəsi

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.

Kotlin
// 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.

XML layout dp ilə

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-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.

dp istifadəsində tipik səhvlər

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.

  • px əvəzinə dp — tətbiq müxtəlif sıxlıqlı cihazlarda fərqli görünür. Düzəliş: XML-də px-i dp ilə əvəz etmək.
  • Inline dəyərlər — ölçülər birbaşa layout fayllarına yazılıb. Dəyərlərin təkrarlanması texniki xidməti və yeniləməni çətinləşdirir.
  • Mətn üçün sp — şrift ölçüsü üçün dp istifadəsi istifadəçi tənzimləmələrini nəzərə almır, əlçatanlığı pozur.
  • Tam bölmə — Kotlin-də Int-in Int-ə bölünməsi Int verir, kəsr hissə itir. Həmişə Float istifadə edin.

Tez-tez verilən suallar

dp iOS-dakı pt-dən nə ilə fərqlənir?

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 dp-ni px-ə necə çevirmək olar?

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.

iOS-də dp istifadə etmək lazımdırmı?

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ə

  • dp — Density-independent Pixel, Android-də UI ölçüləri üçün 1/160 düymə bərabər abstrakt vahid.
  • Düstur: px = dp × (dpi / 160). mdpi-də 1 dp = 1 px, xxhdpi-də 1 dp = 3 px.
  • XML layout fayllarında bütün ölçülər dp ilə, mətn ölçüsü sp ilə verilməlidir.
  • dimens.xml — ölçülərin mərkəzləşdirilmiş saxlanması. Bir dəyişiklik bütün interfeysi yeniləyir.
  • 8-point grid: bütün ölçülər 8 dp-yə qat, mətn boşluqları — 4 sp.
  • Proqram kodunda dp-ni px-ə çevirmək üçün TypedResource və ya genişləndirmə funksiyalarından istifadə edin.

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.

Layihəni müzakirə et

Həm də oxuyun