dp — temeller, Android'de yoğunluktan bağımsız pikseller

Yazar: IT Sectr Yayınlanma: 2026-02-25 Okuma süresi: 7 dk

dp'nin (yoğunluktan bağımsız piksel) temellerini açıklıyoruz — farklı piksel yoğunluklarına sahip ekranlarda UI öğelerinin aynı fiziksel boyutunu sağlayan Android'de bir ölçü birimi. Bir dp, cihazın yüksek veya düşük çözünürlüğe sahip olmasına bakılmaksızın, ekranda her zaman 1/160 inç'e karşılık gelir. Google Material Design (2025)'e göre, Android uygulamalarındaki tüm boyutlar px yerine dp cinsinden belirtilmelidir, aksi takdirde arayüz farklı cihazlarda farklı görünecektir.

Önemli Noktalar

  • dp (yoğunluktan bağımsız piksel) — Android'de soyut bir ölçü birimi, ekranda 1/160 inç'e eşittir.
  • Dönüştürme formülü: px = dp × (dpi / 160). mdpi ekranlarda 1 dp = 1 px, xxhdpi'de 1 dp = 3 px.
  • XML düzenlerindeki tüm boyutlar (layout_width, padding, margin) dp cinsinden belirtilir.
  • dimens.xml — dp değerlerinin merkezi depolanması için Android kaynak dosyası.
  • Google Android Performance Guide (2025)'e göre, px yerine dp kullanmak farklı ekranlarda arayüz uyum sorunlarının %90'ını ortadan kaldırır.

Android'de dp nedir?

dp (yoğunluktan bağımsız piksel), farklı piksel yoğunluklarına sahip cihazlarda UI öğelerinin boyutlarını birleştirmek için tanıtılan Android'de sanal bir ölçü birimidir. Bir dp, 160 dpi yoğunluğa (mdpi) sahip bir ekranda yaklaşık olarak bir fiziksel piksele eşittir. 320 dpi yoğunluğa (xhdpi) sahip bir ekranda, 1 dp 2 fiziksel piksele eşittir. Böylece, ekrandaki bir öğenin fiziksel boyutu aynı kalır — yaklaşık 1/160 inç. Android Developers (2025)'e göre dp, layout, padding, margin ve view genişlik/yükseklik boyutları için kullanılması gereken tek ölçü birimidir.

Neden px kullanılmamalı

Bir düğmenin genişliğini 160 px olarak ayarlarsanız, mdpi ekranda 1 inç genişliğinde olur, ancak xxxhdpi ekranda (640 dpi) — yalnızca 0,25 inç. dp bu sorunu çözer: herhangi bir ekranda 160 dp, 1 inç'e eşit olacaktır. Android, işleme sırasında DisplayMetrics.density aracılığıyla dp'yi otomatik olarak px'e dönüştürür. Android Developer Blog (2025)'e göre, dp'nin (Android 1.0) tanıtılmasından önce, geliştiriciler px ofsetlerini manuel olarak hesaplıyordu ve bu da taşıma sırasında sürekli hatalara yol açıyordu.

dp, px ve sp: fark nedir

dp, px ve sp, her biri kendi amacına sahip Android'deki üç ölçü birimidir. px, yoğunluğa bağlı olan fiziksel bir ekran pikselidir. dp, öğe boyutları için yoğunluktan bağımsız bir pikseldir. sp, sistem yazı tipi boyutu ayarlarını da dikkate alan metin için ölçekten bağımsız bir pikseldir. Material Design (2025)'e göre, dp ve sp arasındaki fark önemli bir erişilebilirlik noktasıdır: görme gücü zayıf olan kullanıcılar yazı tipi boyutunu artırır ve sp değerleri otomatik olarak ayarlanırken, dp ayarlanmaz.

BirimTam adıYoğunluğu dikkate alırYazı tipi ayarlarını dikkate alırKullanım
pxPikselHayırHayırÖnerilmez
dpYoğunluktan Bağımsız PikselEvetHayırLayout, padding, kenar boşlukları
spÖlçekten Bağımsız PikselEvetEvetMetin boyutu

dp'yi px'e ve tersine dönüştürme formülü

dp'den px'e dönüştürme formülü: px = dp × (dpi / 160). Ters dönüşüm için: dp = px / (dpi / 160). density, Android'in DisplayMetrics'e dayanarak hesapladığı dpi / 160 oranıdır. mdpi'de density = 1,0, hdpi'de = 1,5, xhdpi'de = 2,0, xxhdpi'de = 3,0, xxxhdpi'de = 4,0. Bu nedenle, piksel cinsinden 48 dp: mdpi'de — 48 px, xxhdpi'de — 144 px. Google I/O 2024'e göre, bu formül iOS pt (nokta) birimini dp'ye yaklaşık olarak dönüştürmek için kullanılabilir — 1 pt ≈ 1 dp.

KovaYoğunlukdpi değeri48 dp px cinsinden16 dp px cinsinden
mdpi1.01604816
hdpi1.52407224
xhdpi2.03209632
xxhdpi3.048014448
xxxhdpi4.064019264

dimens.xml: merkezi boyut yönetimi

dimens.xml, res/values/ içinde, tüm boyutları dp (ve metin için sp) cinsinden depolamak için tasarlanmış bir Android kaynak dosyasıdır. Boyutların dimens.xml'de merkezileştirilmesi bakımı basitleştirir: dimens.xml'de bir değeri değiştirmek, uygulamanın tüm ekranlarındaki boyutu günceller. Farklı yoğunluklar (values-hdpi, values-xhdpi) için nitelikli dimens.xml dosyaları oluşturabilirsiniz. Android Jetpack Docs (2025)'e göre Google, kenar boşluklarını, padding'i, öğe genişliklerini (sabitler), avatar boyutlarını ve araç çubuğu yüksekliğini dimens.xml'de depolamayı önerir.

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 dosyada, her dimen bir ada ve değere sahiptir. XML işaretlemesinde kullanım: @dimen/avatar_size. Material Design Guidelines (2025)'e göre, Android'de temel ızgara adımı 8 dp'dir (8 noktalı ızgara). Tüm kenar boşlukları, öğe boyutları ve mesafeler 8 dp'nin katları olmalıdır: 8, 16, 24, 32, 48, 56, 64, 72 dp. Metin için adım 4 sp'dir.

Kotlin ve XML'de dp'nin programatik kullanımı

XML işaretlemesinde dp doğrudan kullanılır: android:layout_width="48dp". Programatik kodda (Kotlin/Java), TypedResource veya uzantı işlevlerini kullanarak dp'yi px'e dönüştürmek gerekir. TypedResource, çalışma zamanında dp ile çalışmak için hazır yöntemler sağlar: getDimensionPixelSize() bir tam sayı px değeri döndürür. Jetpack Compose'da dp, değiştiricilerde ve düzen kaplarında standart ölçü birimidir.

Kotlin
// dp'yi programatik olarak px'e dönüştürme
fun Context.dpToPx(dp: Int): Int {
    return (dp * resources
        .displayMetrics
        .density).toInt()
}

// Activity'de kullanım
val paddingPx = dpToPx(16)
button.setPadding(
    paddingPx,
    paddingPx,
    paddingPx,
    paddingPx,
)

// Jetpack Compose: yerleşik bir birim olarak dp
Modifier
    .padding(16.dp)
    .size(48.dp)

Bu örnekte, dpToPx(), displayMetrics.density kullanarak dp'yi px'e dönüştüren Context için bir uzantı işlevidir. Jetpack Compose'da dp, tür sistemine yerleşiktir ve manuel dönüştürme gerektirmez — derleyici, işleme aşamasında dp'yi otomatik olarak px'e çevirir.

dp ile XML işaretlemesi

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'de dp, sayının son eki olarak belirtilir — margin_top="16dp". Metin için sp kullanılır — textSize="@dimen/text_size_body". @dimen referansı, merkezi değer yönetimine olanak tanır. Genişlik için match_parent ve yükseklik için 48dp kullanmak, düğmeler için standart bir Material Design modelidir.

dp kullanırken yaygın hatalar

Google Play Console (2025)'den Android uygulamalarının bir analizine göre, en yaygın beş hata şunlardır: XML işaretlemesinde px yerine dp kullanmamak, dimens.xml eksikliği (değerler satır içi yazılmış), kodda yanlış dp'den px'e dönüştürme (tam sayı bölme kullanımı), metin için sp'yi yok saymak ve sp aracılığıyla sistem yazı tipi boyutu ayarlarını dikkate almamak. Tam sayı bölme en tehlikeli hatadır: Kotlin'de val px = dp * density — eğer dp ve density Int ise, sonuç da Int olur ve hassasiyet kaybolur.

  • px yerine dp — uygulama farklı yoğunluktaki cihazlarda farklı görünür. XML'de px'in dp ile değiştirilmesiyle düzeltilir.
  • Satır içi değerler — boyutlar doğrudan düzen dosyalarına yazılır. Değerlerin tekrarlanması bakımı ve güncellemeleri karmaşıklaştırır.
  • Metin için sp — yazı tipi boyutu için dp kullanmak kullanıcı ayarlarını yok sayar ve erişilebilirliği bozar.
  • Tam sayı bölme — Kotlin'de Int'i Int'e bölmek Int verir ve kesirli kısmı kaybeder. Her zaman Float kullanın.

Sıkça Sorulan Sorular

dp, iOS'teki pt'den nasıl farklıdır?

Android'de dp ve iOS'te pt (nokta) eşdeğer ölçü birimleridir. Android'de 1 dp, iOS'te yaklaşık 1 pt'ye eşittir. Her iki kavram da yoğunluktan bağımsız noktaları tanımlar: düşük yoğunluklu eski cihazlarda 1 dp/pt = 1 px, modernlerde — 2-4 px. Fark temel değerdedir: Android temel yoğunluk olarak 160 dpi kullanır, iOS 163 dpi kullanır ve bu da %2'den az bir hata payı sağlar.

Jetpack Compose'da dp nasıl px'e dönüştürülür?

Jetpack Compose'da dönüştürme gerekmez — dp tür sistemine yerleşiktir. Tüm değiştiriciler ve düzenler px değil Dp kabul eder. dp'den px almanız gerekiyorsa, density kullanın: val px = with(LocalDensity.current) { 16.dp.toPx() }. LocalDensity, cihazın ekran yoğunluğunu dikkate alan dönüştürme faktörünü sağlar.

iOS'te dp kullanmam gerekir mi?

dp bir Android terimidir. iOS'te eşdeğeri pt'dir (nokta). Swift, ekran yoğunluğundan bağımsız noktalarla otomatik olarak çalışır. UIKit ve SwiftUI'de tüm boyutlar nokta cinsinden belirtilir ve sistem, ekranın ölçek faktörünü (UIScreen.main.scale) kullanarak bunları px'e dönüştürür. Aynı prensip, farklı isim.

Özet

  • dp — Yoğunluktan Bağımsız Piksel, Android'de UI boyutları için soyut bir birim, 1/160 inç'e eşittir.
  • Formül: px = dp × (dpi / 160). mdpi'de 1 dp = 1 px, xxhdpi'de 1 dp = 3 px.
  • XML işaretlemesindeki tüm boyutlar dp cinsinden, metin boyutu sp cinsinden belirtilmelidir.
  • dimens.xml — boyutların merkezi depolanması. Tek bir değişiklik tüm arayüzü günceller.
  • 8 noktalı ızgara: tüm boyutlar 8 dp'nin katlarıdır, metin aralığı — 4 sp.
  • Programatik kodda, dp'den px'e dönüştürme için TypedResource veya uzantı işlevlerini kullanın.

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun