dp — بنیادی باتیں، Android میں کثافت سے آزاد پکسلز

مصنف: IT Sectr اشاعت: 2026-02-25 مطالعے کا وقت: 7 منٹ

dp (کثافت سے آزاد پکسل) کی بنیادی باتیں بیان کرتے ہیں — Android میں پیمائش کی ایک اکائی جو مختلف پکسل کثافت والی اسکرینوں پر UI عناصر کا ایک جیسا طبعی سائز یقینی بناتی ہے۔ ایک dp ہمیشہ اسکرین پر 1/160 انچ کے برابر ہوتا ہے، چاہے ڈیوائس میں زیادہ یا کم ریزولیوشن ہو۔ Google Material Design (2025) کے مطابق، Android ایپلی کیشنز میں تمام طول و عرض px کی بجائے dp میں متعین ہونے چاہئیں، ورنہ انٹرفیس مختلف ڈیوائسز پر مختلف نظر آئے گا۔

اہم نکات

  • dp (کثافت سے آزاد پکسل) — Android میں پیمائش کی ایک تجریدی اکائی، اسکرین پر 1/160 انچ کے برابر۔
  • تبدیلی کا فارمولا: px = dp × (dpi / 160)۔ mdpi اسکرینوں پر 1 dp = 1 px، xxhdpi پر 1 dp = 3 px۔
  • XML لے آؤٹ میں تمام طول و عرض (layout_width, padding, margin) dp میں متعین کیے جاتے ہیں۔
  • dimens.xml — dp اقدار کے مرکزی ذخیرہ کے لیے Android وسائل کی فائل۔
  • Google Android Performance Guide (2025) کے مطابق، px کی بجائے dp کا استعمال مختلف اسکرینوں پر انٹرفیس موافقت کے 90% مسائل کو ختم کرتا ہے۔

Android میں dp کیا ہے؟

dp (کثافت سے آزاد پکسل) Android میں پیمائش کی ایک مجازی اکائی ہے، جو مختلف پکسل کثافت والے ڈیوائسز پر UI عناصر کے سائز کو یکجا کرنے کے لیے متعارف کرائی گئی ہے۔ ایک dp تقریباً 160 dpi کثافت (mdpi) والی اسکرین پر ایک طبعی پکسل کے برابر ہوتا ہے۔ 320 dpi کثافت (xhdpi) والی اسکرین پر، 1 dp 2 طبعی پکسلز کے برابر ہوتا ہے۔ اس طرح، اسکرین پر کسی عنصر کا طبعی سائز ایک جیسا رہتا ہے — تقریباً 1/160 انچ۔ Android Developers (2025) کے مطابق، dp پیمائش کی واحد اکائی ہے جسے layout، padding، margin اور view کی چوڑائی/اونچائی کے طول و عرض کے لیے استعمال کیا جانا چاہیے۔

px کیوں استعمال نہیں کرنا چاہیے

اگر آپ کسی بٹن کی چوڑائی 160 px مقرر کرتے ہیں، تو mdpi اسکرین پر یہ 1 انچ چوڑا ہوگا، لیکن xxxhdpi اسکرین (640 dpi) پر — صرف 0.25 انچ۔ dp اس مسئلے کو حل کرتا ہے: کسی بھی اسکرین پر 160 dp 1 انچ کے برابر ہوگا۔ Android رینڈرنگ کے دوران DisplayMetrics.density کے ذریعے خود بخود dp کو px میں تبدیل کرتا ہے۔ Android Developer Blog (2025) کے مطابق، dp (Android 1.0) متعارف کرانے سے پہلے، ڈویلپرز دستی طور پر px آف سیٹس کا حساب لگاتے تھے، جس سے پورٹنگ کرتے وقت مسلسل بگ پیدا ہوتے تھے۔

dp، px اور sp: کیا فرق ہے

dp، px اور sp Android میں پیمائش کی تین اکائیاں ہیں، ہر ایک کا اپنا مقصد ہے۔ px ایک طبعی اسکرین پکسل ہے جو کثافت پر منحصر ہے۔ dp عناصر کے طول و عرض کے لیے کثافت سے آزاد پکسل ہے۔ sp متن کے لیے پیمانے سے آزاد پکسل ہے جو سسٹم فونٹ سائز کی ترتیبات کو بھی مدنظر رکھتا ہے۔ Material Design (2025) کے مطابق، dp اور sp کے درمیان فرق ایک اہم رسائی نقطہ ہے: کمزور بینائی والے صارفین فونٹ کا سائز بڑھاتے ہیں، اور sp اقدار خود بخود ایڈجسٹ ہو جاتی ہیں، جبکہ dp نہیں ہوتیں۔

اکائیمکمل نامکثافت کو مدنظر رکھتی ہےفونٹ کی ترتیبات کو مدنظر رکھتی ہےاستعمال
pxپکسلنہیںنہیںسفارش نہیں کی جاتی
dpکثافت سے آزاد پکسلہاںنہیںLayout، padding، مارجن
spپیمانے سے آزاد پکسلہاںہاںمتن کا سائز

dp کو px میں اور اس کے برعکس تبدیل کرنے کا فارمولا

dp سے px میں تبدیلی کا فارمولا: px = dp × (dpi / 160)۔ الٹی تبدیلی کے لیے: dp = px / (dpi / 160)۔ density تناسب dpi / 160 ہے، جسے Android DisplayMetrics کی بنیاد پر شمار کرتا ہے۔ mdpi پر density = 1.0، hdpi پر = 1.5، xhdpi پر = 2.0، xxhdpi پر = 3.0، xxxhdpi پر = 4.0۔ اس طرح، پکسلز میں 48 dp: mdpi پر — 48 px، xxhdpi پر — 144 px۔ Google I/O 2024 کے مطابق، اس فارمولے کو iOS pt (پوائنٹس) کو dp میں تقریبی تبدیلی کے لیے استعمال کیا جا سکتا ہے — 1 pt ≈ 1 dp۔

بالٹیکثافتdpi قدر48 dp پکسلز میں16 dp پکسلز میں
mdpi1.01604816
hdpi1.52407224
xhdpi2.03209632
xxhdpi3.048014448
xxxhdpi4.064019264

dimens.xml: مرکزی طول و عرض کا انتظام

dimens.xml res/values/ میں ایک Android وسائل کی فائل ہے، جو تمام طول و عرض کو dp (اور متن کے لیے sp) میں ذخیرہ کرنے کے لیے ہے۔ dimens.xml میں طول و عرض کو مرکزی بنانا دیکھ بھال کو آسان بناتا ہے: dimens.xml میں ایک قدر تبدیل کرنے سے ایپلیکیشن کی تمام اسکرینوں پر سائز اپ ڈیٹ ہو جاتا ہے۔ آپ مختلف کثافتوں (values-hdpi, values-xhdpi) کے لیے اہل dimens.xml فائلیں بنا سکتے ہیں۔ Android Jetpack Docs (2025) کے مطابق، Google dimens.xml میں مارجن، padding، عناصر کی چوڑائیاں (مستقل)، اوتار کے سائز اور ٹولبار کی اونچائی ذخیرہ کرنے کی سفارش کرتا ہے۔

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>

اس فائل میں، ہر dimen کا ایک نام اور قدر ہے۔ XML مارک اپ میں استعمال: @dimen/avatar_size۔ Material Design Guidelines (2025) کے مطابق، Android میں بنیادی گرڈ مرحلہ 8 dp (8 نکاتی گرڈ) ہے۔ تمام مارجن، عناصر کے سائز اور فاصلے 8 dp کے ضرب ہونے چاہئیں: 8، 16، 24، 32، 48، 56، 64، 72 dp۔ متن کے لیے، مرحلہ 4 sp ہے۔

Kotlin اور XML میں dp کا پروگراماتی استعمال

XML مارک اپ میں، dp براہ راست استعمال ہوتا ہے: android:layout_width="48dp"۔ پروگراماتی کوڈ (Kotlin/Java) میں، TypedResource یا توسیعی افعال کا استعمال کرتے ہوئے dp کو px میں تبدیل کرنا ضروری ہے۔ TypedResource رن ٹائم پر dp کے ساتھ کام کرنے کے لیے تیار طریقے فراہم کرتا ہے: getDimensionPixelSize() ایک عددی px قدر لوٹاتا ہے۔ Jetpack Compose میں، dp modifiers اور layout کنٹینرز میں پیمائش کی معیاری اکائی ہے۔

Kotlin
// پروگراماتی طور پر dp کو px میں تبدیل کرنا
fun Context.dpToPx(dp: Int): Int {
    return (dp * resources
        .displayMetrics
        .density).toInt()
}

// Activity میں استعمال
val paddingPx = dpToPx(16)
button.setPadding(
    paddingPx,
    paddingPx,
    paddingPx,
    paddingPx,
)

// Jetpack Compose: ایک بلٹ ان یونٹ کے طور پر dp
Modifier
    .padding(16.dp)
    .size(48.dp)

اس مثال میں، dpToPx() Context کے لیے ایک توسیعی فعل ہے، جو displayMetrics.density کا استعمال کرتے ہوئے dp کو px میں تبدیل کرتا ہے۔ Jetpack Compose میں، dp ٹائپ سسٹم میں شامل ہے اور دستی تبدیلی کی ضرورت نہیں ہے — کمپائلر رینڈرنگ مرحلے پر خود بخود dp کو px میں ترجمہ کرتا ہے۔

dp کے ساتھ XML مارک اپ

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 میں، dp عدد کے لاحقہ کے طور پر متعین کیا جاتا ہے — margin_top="16dp"۔ متن کے لیے sp استعمال ہوتا ہے — textSize="@dimen/text_size_body"۔ @dimen حوالہ مرکزی قدر کے انتظام کی اجازت دیتا ہے۔ چوڑائی کے لیے match_parent اور اونچائی کے لیے 48dp کا استعمال بٹنوں کے لیے ایک معیاری Material Design پیٹرن ہے۔

dp استعمال کرتے وقت عام غلطیاں

Google Play Console (2025) سے Android ایپلیکیشنز کے تجزیے کے مطابق، پانچ سب سے عام غلطیاں ہیں: XML مارک اپ میں px کی بجائے dp کا استعمال نہ کرنا، dimens.xml کی عدم موجودگی (اقدار ان لائن لکھی گئی ہیں)، کوڈ میں غلط dp سے px تبدیلی (عدد عددی تقسیم کا استعمال)، متن کے لیے sp کو نظر انداز کرنا، اور sp کے ذریعے سسٹم فونٹ سائز کی ترتیبات کو مدنظر نہ رکھنا۔ عدد عددی تقسیم سب سے خطرناک غلطی ہے: Kotlin میں val px = dp * density — اگر dp اور density Int ہیں، تو نتیجہ بھی Int ہوگا، اور درستگی کھو جاتی ہے۔

  • px کی بجائے dp — ایپلیکیشن مختلف کثافت والے ڈیوائسز پر مختلف نظر آتی ہے۔ XML میں px کو dp سے بدل کر درست کیا جاتا ہے۔
  • ان لائن اقدار — طول و عرض براہ راست لے آؤٹ فائلوں میں لکھے جاتے ہیں۔ اقدار کی نقل دیکھ بھال اور اپ ڈیٹ کو پیچیدہ بناتی ہے۔
  • متن کے لیے sp — فونٹ سائز کے لیے dp کا استعمال صارف کی ترتیبات کو نظر انداز کرتا ہے، رسائی کو توڑتا ہے۔
  • عدد عددی تقسیم — Kotlin میں، Int کو Int سے تقسیم کرنے پر Int ملتا ہے، کسری حصہ کھو جاتا ہے۔ ہمیشہ Float استعمال کریں۔

اکثر پوچھے گئے سوالات

dp iOS کے pt سے کیسے مختلف ہے؟

Android میں dp اور iOS میں pt (پوائنٹس) مساوی پیمائش کی اکائیاں ہیں۔ Android میں 1 dp تقریباً iOS میں 1 pt کے برابر ہے۔ دونوں تصورات کثافت سے آزاد پوائنٹس کو بیان کرتے ہیں: پرانے کم کثافت والے ڈیوائسز پر 1 dp/pt = 1 px، جدید پر — 2-4 px۔ فرق بنیادی قدر میں ہے: Android 160 dpi کو بنیادی کثافت کے طور پر استعمال کرتا ہے، iOS 163 dpi استعمال کرتا ہے، جس سے 2% سے کم غلطی کا مارجن ملتا ہے۔

Jetpack Compose میں dp کو px میں کیسے تبدیل کریں؟

Jetpack Compose میں کسی تبدیلی کی ضرورت نہیں ہے — dp ٹائپ سسٹم میں شامل ہے۔ تمام modifiers اور layouts px کی بجائے Dp قبول کرتے ہیں۔ اگر آپ کو dp سے px حاصل کرنے کی ضرورت ہے تو density استعمال کریں: val px = with(LocalDensity.current) { 16.dp.toPx() }۔ LocalDensity تبدیلی کا عنصر فراہم کرتا ہے جو ڈیوائس کی اسکرین کثافت کو مدنظر رکھتا ہے۔

کیا مجھے iOS میں dp استعمال کرنے کی ضرورت ہے؟

dp ایک Android اصطلاح ہے۔ iOS میں، مساوی pt (پوائنٹس) ہے۔ Swift خود بخود پوائنٹس کے ساتھ کام کرتا ہے جو اسکرین کی کثافت سے آزاد ہیں۔ UIKit اور SwiftUI میں، تمام طول و عرض پوائنٹس میں متعین کیے جاتے ہیں، اور نظام اسکرین کے اسکیل فیکٹر (UIScreen.main.scale) کا استعمال کرتے ہوئے انہیں px میں تبدیل کرتا ہے۔ ایک ہی اصول، مختلف نام۔

خلاصہ

  • dp — کثافت سے آزاد پکسل، Android میں UI طول و عرض کے لیے ایک تجریدی اکائی، 1/160 انچ کے برابر۔
  • فارمولا: px = dp × (dpi / 160)۔ mdpi پر 1 dp = 1 px، xxhdpi پر 1 dp = 3 px۔
  • XML مارک اپ میں تمام طول و عرض dp میں متعین ہونے چاہئیں، متن کا سائز sp میں۔
  • dimens.xml — طول و عرض کا مرکزی ذخیرہ۔ ایک تبدیلی پورے انٹرفیس کو اپ ڈیٹ کرتی ہے۔
  • 8 نکاتی گرڈ: تمام طول و عرض 8 dp کے ضرب ہیں، متن کا فاصلہ — 4 sp۔
  • پروگراماتی کوڈ میں، dp سے px میں تبدیلی کے لیے TypedResource یا توسیعی افعال استعمال کریں۔

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں