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