dp (کثافت سے آزاد پکسل) کی بنیادی باتیں بیان کرتے ہیں — Android میں پیمائش کی ایک اکائی جو مختلف پکسل کثافت والی اسکرینوں پر UI عناصر کا ایک جیسا طبعی سائز یقینی بناتی ہے۔ ایک dp ہمیشہ اسکرین پر 1/160 انچ کے برابر ہوتا ہے، چاہے ڈیوائس میں زیادہ یا کم ریزولیوشن ہو۔ Google Material Design (2025) کے مطابق، Android ایپلی کیشنز میں تمام طول و عرض px کی بجائے dp میں متعین ہونے چاہئیں، ورنہ انٹرفیس مختلف ڈیوائسز پر مختلف نظر آئے گا۔
اہم نکات
dp (کثافت سے آزاد پکسل) Android میں پیمائش کی ایک مجازی اکائی ہے، جو مختلف پکسل کثافت والے ڈیوائسز پر UI عناصر کے سائز کو یکجا کرنے کے لیے متعارف کرائی گئی ہے۔ ایک dp تقریباً 160 dpi کثافت (mdpi) والی اسکرین پر ایک طبعی پکسل کے برابر ہوتا ہے۔ 320 dpi کثافت (xhdpi) والی اسکرین پر، 1 dp 2 طبعی پکسلز کے برابر ہوتا ہے۔ اس طرح، اسکرین پر کسی عنصر کا طبعی سائز ایک جیسا رہتا ہے — تقریباً 1/160 انچ۔ Android Developers (2025) کے مطابق، dp پیمائش کی واحد اکائی ہے جسے layout، padding، margin اور view کی چوڑائی/اونچائی کے طول و عرض کے لیے استعمال کیا جانا چاہیے۔
اگر آپ کسی بٹن کی چوڑائی 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 Android میں پیمائش کی تین اکائیاں ہیں، ہر ایک کا اپنا مقصد ہے۔ px ایک طبعی اسکرین پکسل ہے جو کثافت پر منحصر ہے۔ dp عناصر کے طول و عرض کے لیے کثافت سے آزاد پکسل ہے۔ sp متن کے لیے پیمانے سے آزاد پکسل ہے جو سسٹم فونٹ سائز کی ترتیبات کو بھی مدنظر رکھتا ہے۔ Material Design (2025) کے مطابق، dp اور sp کے درمیان فرق ایک اہم رسائی نقطہ ہے: کمزور بینائی والے صارفین فونٹ کا سائز بڑھاتے ہیں، اور sp اقدار خود بخود ایڈجسٹ ہو جاتی ہیں، جبکہ dp نہیں ہوتیں۔
| اکائی | مکمل نام | کثافت کو مدنظر رکھتی ہے | فونٹ کی ترتیبات کو مدنظر رکھتی ہے | استعمال |
|---|---|---|---|---|
| px | پکسل | نہیں | نہیں | سفارش نہیں کی جاتی |
| dp | کثافت سے آزاد پکسل | ہاں | نہیں | Layout، padding، مارجن |
| sp | پیمانے سے آزاد پکسل | ہاں | ہاں | متن کا سائز |
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 پکسلز میں |
|---|---|---|---|---|
| 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/ میں ایک Android وسائل کی فائل ہے، جو تمام طول و عرض کو dp (اور متن کے لیے sp) میں ذخیرہ کرنے کے لیے ہے۔ dimens.xml میں طول و عرض کو مرکزی بنانا دیکھ بھال کو آسان بناتا ہے: dimens.xml میں ایک قدر تبدیل کرنے سے ایپلیکیشن کی تمام اسکرینوں پر سائز اپ ڈیٹ ہو جاتا ہے۔ آپ مختلف کثافتوں (values-hdpi, values-xhdpi) کے لیے اہل dimens.xml فائلیں بنا سکتے ہیں۔ Android Jetpack Docs (2025) کے مطابق، Google dimens.xml میں مارجن، padding، عناصر کی چوڑائیاں (مستقل)، اوتار کے سائز اور ٹولبار کی اونچائی ذخیرہ کرنے کی سفارش کرتا ہے۔
<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 ہے۔
XML مارک اپ میں، dp براہ راست استعمال ہوتا ہے: android:layout_width="48dp"۔ پروگراماتی کوڈ (Kotlin/Java) میں، TypedResource یا توسیعی افعال کا استعمال کرتے ہوئے dp کو px میں تبدیل کرنا ضروری ہے۔ TypedResource رن ٹائم پر dp کے ساتھ کام کرنے کے لیے تیار طریقے فراہم کرتا ہے: getDimensionPixelSize() ایک عددی px قدر لوٹاتا ہے۔ Jetpack Compose میں، dp modifiers اور layout کنٹینرز میں پیمائش کی معیاری اکائی ہے۔
// پروگراماتی طور پر 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 میں ترجمہ کرتا ہے۔
<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 پیٹرن ہے۔
Google Play Console (2025) سے Android ایپلیکیشنز کے تجزیے کے مطابق، پانچ سب سے عام غلطیاں ہیں: XML مارک اپ میں px کی بجائے dp کا استعمال نہ کرنا، dimens.xml کی عدم موجودگی (اقدار ان لائن لکھی گئی ہیں)، کوڈ میں غلط dp سے px تبدیلی (عدد عددی تقسیم کا استعمال)، متن کے لیے sp کو نظر انداز کرنا، اور sp کے ذریعے سسٹم فونٹ سائز کی ترتیبات کو مدنظر نہ رکھنا۔ عدد عددی تقسیم سب سے خطرناک غلطی ہے: Kotlin میں val px = dp * density — اگر dp اور density Int ہیں، تو نتیجہ بھی Int ہوگا، اور درستگی کھو جاتی ہے۔
اکثر پوچھے گئے سوالات
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 ٹائپ سسٹم میں شامل ہے۔ تمام modifiers اور layouts px کی بجائے Dp قبول کرتے ہیں۔ اگر آپ کو dp سے px حاصل کرنے کی ضرورت ہے تو density استعمال کریں: val px = with(LocalDensity.current) { 16.dp.toPx() }۔ LocalDensity تبدیلی کا عنصر فراہم کرتا ہے جو ڈیوائس کی اسکرین کثافت کو مدنظر رکھتا ہے۔
dp ایک Android اصطلاح ہے۔ iOS میں، مساوی pt (پوائنٹس) ہے۔ Swift خود بخود پوائنٹس کے ساتھ کام کرتا ہے جو اسکرین کی کثافت سے آزاد ہیں۔ UIKit اور SwiftUI میں، تمام طول و عرض پوائنٹس میں متعین کیے جاتے ہیں، اور نظام اسکرین کے اسکیل فیکٹر (UIScreen.main.scale) کا استعمال کرتے ہوئے انہیں px میں تبدیل کرتا ہے۔ ایک ہی اصول، مختلف نام۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں