dp — मूल बातें, Android में डेंसिटी-इंडिपेंडेंट पिक्सल

लेखक: IT Sectr प्रकाशित: 2026-02-25 पढ़ने का समय: 7 मिनट

dp (डेंसिटी-इंडिपेंडेंट पिक्सल) की मूल बातें समझाते हैं — Android में माप की एक इकाई जो विभिन्न पिक्सल डेंसिटी वाली स्क्रीन पर UI तत्वों का समान भौतिक आकार सुनिश्चित करती है। एक dp हमेशा स्क्रीन पर 1/160 इंच के बराबर होता है, चाहे डिवाइस में उच्च या निम्न रिज़ॉल्यूशन हो। Google Material Design (2025) के अनुसार, Android ऐप्लिकेशन में सभी आयाम dp में निर्दिष्ट होने चाहिए, px में नहीं, अन्यथा इंटरफ़ेस विभिन्न डिवाइसों पर अलग दिखेगा।

मुख्य बातें

  • 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डेंसिटी-इंडिपेंडेंट पिक्सलहाँनहींलेआउट, पैडिंग, मार्जिन
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 में मार्जिन, पैडिंग, तत्व चौड़ाई (स्थिरांक), अवतार आकार और टूलबार ऊंचाई संग्रहीत करने की अनुशंसा करता है।

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 मॉडिफ़ायर और लेआउट कंटेनरों में माप की मानक इकाई है।

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 टाइप सिस्टम में निर्मित है। सभी मॉडिफ़ायर और लेआउट Dp स्वीकार करते हैं, px नहीं। यदि आपको 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 एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें