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 অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন