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), 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.
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, 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.
| Birim | Tam adı | Yoğunluğu dikkate alır | Yazı tipi ayarlarını dikkate alır | Kullanım |
|---|---|---|---|---|
| px | Piksel | Hayır | Hayır | Önerilmez |
| dp | Yoğunluktan Bağımsız Piksel | Evet | Hayır | Layout, padding, kenar boşlukları |
| sp | Ölçekten Bağımsız Piksel | Evet | Evet | Metin boyutu |
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.
| Kova | Yoğunluk | dpi değeri | 48 dp px cinsinden | 16 dp px cinsinden |
|---|---|---|---|---|
| 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/ 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.
<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.
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.
// 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.
<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.
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.
Sıkça Sorulan Sorular
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 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.
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
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.
Ayrıca okuyun