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

প্রকল্প নিয়ে আলোচনা করুন

আরও পড়ুন