বিভিন্ন পিক্সেল ঘনত্ব সমর্থন করে

অ্যান্ড্রয়েড ডিভাইসে শুধুমাত্র বিভিন্ন স্ক্রীনের মাপ থাকে না—হ্যান্ডসেট, ট্যাবলেট, টিভি ইত্যাদি—কিন্তু বিভিন্ন পিক্সেল আকারের স্ক্রিনও থাকে একটি ডিভাইসে প্রতি ইঞ্চিতে 160 পিক্সেল থাকতে পারে, অন্য একটি ডিভাইস একই জায়গায় 480 পিক্সেল ফিট করে। আপনি যদি পিক্সেল ঘনত্বের এই বৈচিত্রগুলি বিবেচনা না করেন, তবে সিস্টেমটি আপনার চিত্রগুলিকে স্কেল করতে পারে, যার ফলে চিত্রগুলি ঝাপসা হতে পারে, বা চিত্রগুলি ভুল আকারে প্রদর্শিত হতে পারে৷

এই পৃষ্ঠাটি আপনাকে দেখায় কিভাবে আপনি পরিমাপের রেজোলিউশন-স্বাধীন একক ব্যবহার করে এবং প্রতিটি পিক্সেল ঘনত্বের জন্য বিকল্প বিটম্যাপ সংস্থান প্রদান করে বিভিন্ন পিক্সেল ঘনত্বকে সমর্থন করার জন্য আপনার অ্যাপ ডিজাইন করতে পারেন।

এই কৌশলগুলির একটি ওভারভিউ জন্য নিম্নলিখিত ভিডিও দেখুন.

আইকন সম্পদ ডিজাইন করার বিষয়ে আরও তথ্যের জন্য, মেটেরিয়াল ডিজাইন আইকন নির্দেশিকা দেখুন।

ঘনত্ব-স্বাধীন পিক্সেল ব্যবহার করুন

দূরত্ব বা মাপ নির্ধারণ করতে পিক্সেল ব্যবহার করা এড়িয়ে চলুন। পিক্সেলের সাথে মাত্রা নির্ধারণ করা একটি সমস্যা কারণ বিভিন্ন স্ক্রীনের বিভিন্ন পিক্সেল ঘনত্ব থাকে, তাই একই সংখ্যক পিক্সেল বিভিন্ন ডিভাইসে বিভিন্ন শারীরিক আকারের সাথে মিলে যায়।

একটি চিত্র যা বিভিন্ন ঘনত্বের সাথে দুটি উদাহরণ ডিভাইস প্রদর্শন করে
চিত্র 1 : একই আকারের দুটি স্ক্রীনে বিভিন্ন সংখ্যক পিক্সেল থাকতে পারে।

বিভিন্ন ঘনত্ব সহ স্ক্রীনে আপনার UI এর দৃশ্যমান আকার সংরক্ষণ করতে, আপনার পরিমাপের একক হিসাবে ঘনত্ব-স্বাধীন পিক্সেল (dp) ব্যবহার করে আপনার UI ডিজাইন করুন। ওয়ান ডিপি হল একটি ভার্চুয়াল পিক্সেল ইউনিট যা একটি মাঝারি ঘনত্বের স্ক্রিনে প্রায় এক পিক্সেলের সমান (160 ডিপিআই বা "বেসলাইন" ঘনত্ব)। অ্যান্ড্রয়েড এই মানটিকে একে অপরের ঘনত্বের জন্য উপযুক্ত সংখ্যক বাস্তব পিক্সেলে অনুবাদ করে।

চিত্র 1-এ দুটি ডিভাইস বিবেচনা করুন। 100 পিক্সেল চওড়া একটি ভিউ বাম দিকের ডিভাইসে অনেক বড় দেখায়। 100 ডিপি প্রশস্ত হিসাবে সংজ্ঞায়িত একটি দৃশ্য উভয় স্ক্রিনে একই আকার প্রদর্শিত হয়।

টেক্সট আকার সংজ্ঞায়িত করার সময়, আপনি পরিবর্তে আপনার ইউনিট হিসাবে স্কেলযোগ্য পিক্সেল (sp) ব্যবহার করতে পারেন। ডিফল্টরূপে sp ইউনিটটি dp-এর সমান, কিন্তু ব্যবহারকারীর পছন্দের পাঠ্য আকারের উপর ভিত্তি করে এটি পুনরায় আকার দেয়। লেআউট আকারের জন্য sp ব্যবহার করবেন না।

উদাহরণস্বরূপ, দুটি দর্শনের মধ্যে ব্যবধান নির্দিষ্ট করতে, dp ব্যবহার করুন:

<Button android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/clickme"
    android:layout_marginTop="20dp" />

পাঠ্যের আকার নির্দিষ্ট করার সময়, sp ব্যবহার করুন:

<TextView android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="20sp" />

ডিপি ইউনিটকে পিক্সেল ইউনিটে রূপান্তর করুন

কিছু ক্ষেত্রে, আপনাকে ডিপিতে মাত্রা প্রকাশ করতে হবে এবং তারপরে সেগুলিকে পিক্সেলে রূপান্তর করতে হবে। ডিপি ইউনিটের স্ক্রীন পিক্সেলে রূপান্তর নিম্নরূপ:

px = dp * (dpi / 160)

দ্রষ্টব্য: পিক্সেল গণনা করতে এই সমীকরণটি কখনই হার্ডকোড করবেন না। পরিবর্তে, TypedValue.applyDimension() ব্যবহার করুন, যা আপনার জন্য অনেক ধরনের মাত্রা (dp, sp, ইত্যাদি) পিক্সেলে রূপান্তর করে।

এমন একটি অ্যাপ কল্পনা করুন যেখানে ব্যবহারকারীর আঙুল কমপক্ষে 16 পিক্সেল সরানোর পরে একটি স্ক্রোল বা ফ্লিং অঙ্গভঙ্গি স্বীকৃত হয়। একটি বেসলাইন স্ক্রিনে, একজন ব্যবহারকারীর আঙুল অবশ্যই 16 pixels / 160 dpi , যা ইঞ্চি (বা 2.5 মিমি) এর 1/10 সমান, অঙ্গভঙ্গি স্বীকৃত হওয়ার আগে।

একটি উচ্চ-ঘনত্বের ডিসপ্লে (240 dpi) সহ একটি ডিভাইসে, ব্যবহারকারীর আঙুলটি 16 pixels / 240 dpi , যা একটি ইঞ্চি (বা 1.7 মিমি) এর 1/15 সমান। দূরত্ব অনেক কম, এবং অ্যাপটি তাই ব্যবহারকারীর কাছে আরও সংবেদনশীল বলে মনে হয়।

এই সমস্যাটি সমাধান করতে, dp-এ কোডে জেসচার থ্রেশহোল্ড প্রকাশ করুন এবং তারপরে এটিকে প্রকৃত পিক্সেলে রূপান্তর করুন। যেমন:

কোটলিন

// The gesture threshold expressed in dp
private const val GESTURE_THRESHOLD_DP = 16.0f

private var gestureThreshold: Int = 0

// Convert the dps to pixels, based on density scale
gestureThreshold = TypedValue.applyDimension(
  COMPLEX_UNIT_DIP,
  GESTURE_THRESHOLD_DP + 0.5f,
  resources.displayMetrics).toInt()

// Use gestureThreshold as a distance in pixels...

জাভা

// The gesture threshold expressed in dp
private final float GESTURE_THRESHOLD_DP = 16.0f;

// Convert the dps to pixels, based on density scale
int gestureThreshold = (int) TypedValue.applyDimension(
  COMPLEX_UNIT_DIP,
  GESTURE_THRESHOLD_DP + 0.5f,
  getResources().getDisplayMetrics());

// Use gestureThreshold as a distance in pixels...

DisplayMetrics.density ক্ষেত্রটি বর্তমান পিক্সেল ঘনত্ব অনুযায়ী dp ইউনিটকে পিক্সেলে রূপান্তর করতে ব্যবহৃত স্কেল ফ্যাক্টর নির্দিষ্ট করে। একটি মাঝারি-ঘনত্বের স্ক্রিনে, DisplayMetrics.density সমান 1.0, এবং একটি উচ্চ-ঘনত্বের স্ক্রিনে এটি 1.5 এর সমান। একটি অতিরিক্ত-উচ্চ-ঘনত্বের পর্দায়, এটি 2.0 এর সমান এবং একটি নিম্ন-ঘনত্বের পর্দায়, এটি 0.75 এর সমান। বর্তমান স্ক্রিনের প্রকৃত পিক্সেল গণনা পেতে TypedValue.applyDimension() এই চিত্রটি ব্যবহার করে।

প্রাক-স্কেল করা কনফিগারেশন মান ব্যবহার করুন

অ্যান্ড্রয়েড সিস্টেম দ্বারা ব্যবহৃত সাধারণ দূরত্ব, গতি এবং সময় অ্যাক্সেস করতে আপনি ViewConfiguration ক্লাস ব্যবহার করতে পারেন। উদাহরণস্বরূপ, স্ক্রোল থ্রেশহোল্ড হিসাবে ফ্রেমওয়ার্ক দ্বারা ব্যবহৃত পিক্সেলের দূরত্ব getScaledTouchSlop() দিয়ে প্রাপ্ত করা যেতে পারে:

কোটলিন

private val GESTURE_THRESHOLD_DP = ViewConfiguration.get(myContext).scaledTouchSlop

জাভা

private final int GESTURE_THRESHOLD_DP = ViewConfiguration.get(myContext).getScaledTouchSlop();

getScaled উপসর্গ দিয়ে শুরু হওয়া ViewConfiguration পদ্ধতিগুলি পিক্সেলগুলিতে একটি মান ফেরত দেওয়ার নিশ্চয়তা দেয় যা বর্তমান পিক্সেল ঘনত্ব নির্বিশেষে সঠিকভাবে প্রদর্শন করে।

ভেক্টর গ্রাফিক্স পছন্দ করুন

একটি চিত্রের একাধিক ঘনত্ব-নির্দিষ্ট সংস্করণ তৈরি করার একটি বিকল্প হল শুধুমাত্র একটি ভেক্টর গ্রাফিক তৈরি করা। ভেক্টর গ্রাফিক্স পিক্সেল বিটম্যাপ ব্যবহার করার পরিবর্তে পাথ এবং রঙ নির্ধারণ করতে XML ব্যবহার করে একটি চিত্র তৈরি করে। যেমন, ভেক্টর গ্রাফিক্স আর্টিফ্যাক্টগুলিকে স্কেলিং না করেই যে কোনও আকারে স্কেল করতে পারে, যদিও সেগুলি সাধারণত আইকনগুলির মতো চিত্রের জন্য সেরা, ফটোগ্রাফ নয়।

ভেক্টর গ্রাফিক্স প্রায়ই SVG (স্কেলযোগ্য ভেক্টর গ্রাফিক্স) ফাইল হিসাবে প্রদান করা হয়, কিন্তু Android এই বিন্যাসটিকে সমর্থন করে না তাই আপনাকে অবশ্যই SVG ফাইলগুলিকে Android এর ভেক্টর অঙ্কনযোগ্য বিন্যাসে রূপান্তর করতে হবে।

আপনি নিম্নরূপ Android স্টুডিওর ভেক্টর অ্যাসেট স্টুডিও ব্যবহার করে একটি SVG কে একটি ভেক্টর ড্রয়েবলে রূপান্তর করতে পারেন:

  1. প্রজেক্ট উইন্ডোতে, রেস ডিরেক্টরিতে ডান-ক্লিক করুন এবং নতুন > ভেক্টর সম্পদ নির্বাচন করুন।
  2. স্থানীয় ফাইল (SVG, PSD) নির্বাচন করুন।
  3. আপনি যে ফাইলটি আমদানি করতে চান তা সনাক্ত করুন এবং কোনো সমন্বয় করুন।

    অ্যান্ড্রয়েড স্টুডিওতে কীভাবে এসভিজি আমদানি করতে হয় তা দেখানো একটি চিত্র৷
    চিত্র 2 : অ্যান্ড্রয়েড স্টুডিওর সাথে একটি এসভিজি আমদানি করা।

    আপনি সম্পদ স্টুডিও উইন্ডোতে কিছু ত্রুটি লক্ষ্য করতে পারেন যা নির্দেশ করে যে ভেক্টর অঙ্কনযোগ্য ফাইলের কিছু বৈশিষ্ট্য সমর্থন করে না। এটি আপনাকে ফাইল আমদানি করতে বাধা দেয় না; অসমর্থিত বৈশিষ্ট্য উপেক্ষা করা হয়.

  4. পরবর্তী ক্লিক করুন.

  5. পরবর্তী স্ক্রিনে, আপনার প্রোজেক্টে আপনি যেখানে ফাইলটি চান সেই উৎস সেটটি নিশ্চিত করুন এবং Finish এ ক্লিক করুন।

    যেহেতু একটি ভেক্টর অঙ্কনযোগ্য সমস্ত পিক্সেল ঘনত্বে ব্যবহার করা যেতে পারে, এই ফাইলটি আপনার ডিফল্ট অঙ্কনযোগ্য ডিরেক্টরিতে যায়, যেমনটি নিম্নলিখিত অনুক্রমে দেখানো হয়েছে। আপনাকে ঘনত্ব-নির্দিষ্ট ডিরেক্টরি ব্যবহার করতে হবে না।

    res/
      drawable/
        ic_android_launcher.xml
    

ভেক্টর গ্রাফিক্স তৈরির বিষয়ে আরও তথ্যের জন্য, ভেক্টর অঙ্কনযোগ্য ডকুমেন্টেশন পড়ুন।

বিকল্প বিটম্যাপ প্রদান করুন

বিভিন্ন পিক্সেল ঘনত্ব সহ ডিভাইসগুলিতে ভাল গ্রাফিকাল গুণমান সরবরাহ করতে, আপনার অ্যাপে প্রতিটি বিটম্যাপের একাধিক সংস্করণ সরবরাহ করুন - একটি সংশ্লিষ্ট রেজোলিউশনে প্রতিটি ঘনত্বের বালতির জন্য একটি। অন্যথায়, অ্যান্ড্রয়েডকে অবশ্যই আপনার বিটম্যাপ স্কেল করতে হবে যাতে এটি প্রতিটি স্ক্রিনে একই দৃশ্যমান স্থান দখল করে, যার ফলে অস্পষ্টতার মতো শিল্পকর্মগুলিকে স্কেলিং করা হয়।

বিভিন্ন ঘনত্বের আকারে বিটম্যাপের আপেক্ষিক মাপ দেখানো একটি চিত্র
চিত্র 3 : বিভিন্ন ঘনত্বের বালতিতে বিটম্যাপের আপেক্ষিক মাপ।

আপনার অ্যাপ্লিকেশানগুলিতে ব্যবহারের জন্য বেশ কয়েকটি ঘনত্বের বালতি উপলব্ধ রয়েছে৷ সারণি 1 উপলব্ধ বিভিন্ন কনফিগারেশন কোয়ালিফায়ার বর্ণনা করে এবং তারা কোন ধরনের স্ক্রীনের জন্য প্রযোজ্য।

সারণী 1. বিভিন্ন পিক্সেল ঘনত্বের জন্য কনফিগারেশন কোয়ালিফায়ার।

ঘনত্ব কোয়ালিফায়ার বর্ণনা
ldpi কম ঘনত্ব ( ldpi ) স্ক্রীনের জন্য সম্পদ (~120 dpi)।
mdpi মাঝারি-ঘনত্ব ( mdpi ) স্ক্রীনের জন্য সম্পদ (~160 dpi)। এটি বেসলাইন ঘনত্ব।
hdpi উচ্চ-ঘনত্ব ( hdpi ) স্ক্রীনের জন্য সম্পদ (~240 dpi)।
xhdpi অতিরিক্ত-উচ্চ-ঘনত্ব ( xhdpi ) স্ক্রীনের জন্য সম্পদ (~320 dpi)।
xxhdpi অতিরিক্ত-অতিরিক্ত-উচ্চ-ঘনত্ব ( xxhdpi ) স্ক্রীনের জন্য সম্পদ (~480 dpi)।
xxxhdpi অতিরিক্ত-অতিরিক্ত-অতিরিক্ত-উচ্চ-ঘনত্ব ( xxxhdpi ) ব্যবহারের জন্য সম্পদ (~640 dpi)।
nodpi সমস্ত ঘনত্বের জন্য সম্পদ। এগুলি ঘনত্ব-স্বাধীন সম্পদ। বর্তমান স্ক্রিনের ঘনত্ব নির্বিশেষে সিস্টেমটি এই কোয়ালিফায়ারের সাথে ট্যাগ করা সংস্থানগুলিকে স্কেল করে না।
tvdpi mdpi এবং hdpi এর মধ্যে কোথাও স্ক্রীনের জন্য সম্পদ; প্রায় ~213 ডিপিআই। এটি একটি "প্রাথমিক" ঘনত্ব গ্রুপ হিসাবে বিবেচিত হয় না। এটি বেশিরভাগই টেলিভিশনের জন্য উদ্দিষ্ট, এবং বেশিরভাগ অ্যাপের এটির প্রয়োজন নেই—এমডিপিআই এবং এইচডিপিআই রিসোর্স প্রদান করা বেশিরভাগ অ্যাপের জন্য যথেষ্ট, এবং সিস্টেম তাদের উপযুক্ত হিসাবে স্কেল করে। আপনি যদি tvdpi সংস্থানগুলি সরবরাহ করা প্রয়োজন মনে করেন তবে সেগুলিকে 1.33 * এমডিপিআই এর একটি গুণক এ আকার দিন। উদাহরণস্বরূপ, mdpi স্ক্রিনের জন্য একটি 100x100 পিক্সেল চিত্র tvdpi-এর জন্য 133x133 পিক্সেল।

বিভিন্ন ঘনত্বের জন্য বিকল্প বিটম্যাপ অঙ্কনযোগ্য তৈরি করতে, ছয়টি প্রাথমিক ঘনত্বের মধ্যে 3:4:6:8:12:16 স্কেলিং অনুপাত অনুসরণ করুন। উদাহরণস্বরূপ, যদি মাঝারি-ঘনত্বের পর্দার জন্য 48x48 পিক্সেলের একটি বিটম্যাপ আঁকা যায়, তাহলে মাপগুলি হল:

  • কম ঘনত্বের জন্য 36x36 (0.75x) (ldpi)
  • মাঝারি ঘনত্বের জন্য 48x48 (1.0x বেসলাইন) (mdpi)
  • উচ্চ ঘনত্বের জন্য 72x72 (1.5x) (hdpi)
  • অতিরিক্ত-উচ্চ ঘনত্বের জন্য 96x96 (2.0x) (xhdpi)
  • 144x144 (3.0x) অতিরিক্ত-অতিরিক্ত-উচ্চ ঘনত্বের জন্য (xxhdpi)
  • 192x192 (4.0x) অতিরিক্ত-অতিরিক্ত-অতিরিক্ত-উচ্চ ঘনত্বের জন্য (xxxhdpi)

উত্পন্ন ইমেজ ফাইলগুলিকে res/ অধীনে উপযুক্ত সাবডিরেক্টরিতে রাখুন:

res/
  drawable-xxxhdpi/
    awesome_image.png
  drawable-xxhdpi/
    awesome_image.png
  drawable-xhdpi/
    awesome_image.png
  drawable-hdpi/
    awesome_image.png
  drawable-mdpi/
    awesome_image.png

তারপর, যে কোনো সময় আপনি @drawable/awesomeimage রেফারেন্স করেন, সিস্টেমটি পর্দার dpi-এর উপর ভিত্তি করে উপযুক্ত বিটম্যাপ নির্বাচন করে। যদি আপনি সেই ঘনত্বের জন্য একটি ঘনত্ব-নির্দিষ্ট সংস্থান প্রদান না করেন, তাহলে সিস্টেমটি পরবর্তী-সেরা মিলটি সনাক্ত করে এবং পর্দার সাথে মানানসই করার জন্য এটিকে স্কেল করে।

টিপ: আপনার কাছে যদি অঙ্কনযোগ্য সংস্থান থাকে যা আপনি সিস্টেমটি স্কেল করতে চান না, যেমন আপনি যখন রানটাইমে নিজের ইমেজে কিছু সামঞ্জস্য করছেন, সেগুলিকে nodpi কনফিগারেশন কোয়ালিফায়ার সহ একটি ডিরেক্টরিতে রাখুন। এই কোয়ালিফায়ার সহ সংস্থানগুলিকে ঘনত্ব-অজ্ঞেয়বাদী হিসাবে বিবেচনা করা হয় এবং সিস্টেম সেগুলিকে স্কেল করে না।

অন্যান্য কনফিগারেশন যোগ্যতা এবং Android কীভাবে বর্তমান স্ক্রীন কনফিগারেশনের জন্য উপযুক্ত সংস্থান নির্বাচন করে সে সম্পর্কে আরও তথ্যের জন্য, অ্যাপ সংস্থান ওভারভিউ দেখুন।

মিপম্যাপ ডিরেক্টরিতে অ্যাপ আইকন রাখুন

অন্যান্য বিটম্যাপ সম্পদের মতো, আপনাকে আপনার অ্যাপ আইকনের ঘনত্ব-নির্দিষ্ট সংস্করণ প্রদান করতে হবে। যাইহোক, কিছু অ্যাপ লঞ্চার আপনার অ্যাপ আইকনটিকে ডিভাইসের ঘনত্বের বালতির চেয়ে 25% বড় প্রদর্শন করে।

উদাহরণস্বরূপ, যদি একটি ডিভাইসের ঘনত্বের বালতিটি xxhdpi হয় এবং আপনার সরবরাহ করা বৃহত্তম অ্যাপ আইকনটি drawable-xxhdpi তে থাকে, তাহলে অ্যাপ লঞ্চার এই আইকনটিকে স্কেল করে, যা এটিকে কম খাস্তা দেখায়।

এটি এড়াতে, drawable ডিরেক্টরির পরিবর্তে mipmap ডিরেক্টরিতে আপনার সমস্ত অ্যাপ আইকন রাখুন। drawable ডিরেক্টরির বিপরীতে, আপনি ঘনত্ব-নির্দিষ্ট APK তৈরি করলেও, সমস্ত mipmap ডিরেক্টরিগুলিকে APK-তে রাখা হয়। এটি লঞ্চার অ্যাপগুলিকে হোম স্ক্রিনে প্রদর্শনের জন্য সেরা রেজোলিউশন আইকন বাছাই করতে দেয়৷

res/
  mipmap-xxxhdpi/
    launcher_icon.png
  mipmap-xxhdpi/
    launcher_icon.png
  mipmap-xhdpi/
    launcher_icon.png
  mipmap-hdpi/
    launcher_icon.png
  mipmap-mdpi/
    launcher_icon.png

একটি xxhdpi ডিভাইসের পূর্ববর্তী উদাহরণে, আপনি mipmap-xxxhdpi ডিরেক্টরিতে একটি উচ্চ-ঘনত্ব লঞ্চার আইকন প্রদান করতে পারেন।

আইকন ডিজাইনের নির্দেশিকাগুলির জন্য, সিস্টেম আইকনগুলি দেখুন।

অ্যাপ আইকন তৈরিতে সহায়তার জন্য, ইমেজ অ্যাসেট স্টুডিও দিয়ে অ্যাপ আইকন তৈরি করুন দেখুন।

অস্বাভাবিক ঘনত্বের সমস্যাগুলির জন্য পরামর্শ

এই বিভাগটি বর্ণনা করে যে কীভাবে Android বিভিন্ন পিক্সেল ঘনত্বে বিটম্যাপের জন্য স্কেলিং সঞ্চালন করে এবং কীভাবে আপনি বিভিন্ন ঘনত্বে বিটম্যাপগুলিকে আরও নিয়ন্ত্রণ করতে পারেন। যতক্ষণ না আপনার অ্যাপ গ্রাফিক্স ম্যানিপুলেট করে বা বিভিন্ন পিক্সেল ঘনত্বে চলার সময় আপনি সমস্যার সম্মুখীন না হন, আপনি এই বিভাগটিকে উপেক্ষা করতে পারেন।

রানটাইমে গ্রাফিক্স ম্যানিপুলেট করার সময় আপনি কীভাবে একাধিক ঘনত্ব সমর্থন করতে পারেন তা আরও ভালভাবে বোঝার জন্য, আপনাকে জানতে হবে কীভাবে সিস্টেমটি বিটম্যাপের জন্য সঠিক স্কেল নিশ্চিত করতে সহায়তা করে। এটি নিম্নলিখিত উপায়ে করা হয়:

  1. সম্পদের প্রাক-স্কেলিং, যেমন বিটম্যাপ অঙ্কনযোগ্য

    বর্তমান স্ক্রিনের ঘনত্বের উপর ভিত্তি করে, সিস্টেমটি আপনার অ্যাপ থেকে যেকোনো ঘনত্ব-নির্দিষ্ট সম্পদ ব্যবহার করে। সঠিক ঘনত্বে সম্পদ উপলব্ধ না হলে, সিস্টেম ডিফল্ট সংস্থানগুলি লোড করে এবং প্রয়োজন অনুসারে সেগুলিকে উপরে বা নীচে স্কেল করে। সিস্টেমটি অনুমান করে যে ডিফল্ট সংস্থানগুলি (যেগুলি কনফিগারেশন কোয়ালিফায়ার ছাড়াই একটি ডিরেক্টরি থেকে) বেসলাইন পিক্সেল ঘনত্ব (mdpi) এর জন্য ডিজাইন করা হয়েছে এবং বর্তমান পিক্সেল ঘনত্বের জন্য উপযুক্ত আকারে সেই বিটম্যাপগুলিকে পুনরায় আকার দেয়৷

    যদি আপনি একটি প্রাক-স্কেল করা সম্পদের মাত্রার জন্য অনুরোধ করেন, তাহলে সিস্টেমটি স্কেলিং করার পরে মাত্রার প্রতিনিধিত্বকারী মান প্রদান করে। উদাহরণস্বরূপ, একটি mdpi স্ক্রিনের জন্য 50x50 পিক্সেলে ডিজাইন করা একটি বিটম্যাপ একটি hdpi স্ক্রিনে 75x75 পিক্সেলে স্কেল করা হয় (যদি hdpi-এর জন্য কোন বিকল্প সংস্থান না থাকে), এবং সিস্টেমটি আকারের মতো রিপোর্ট করে।

    এমন কিছু পরিস্থিতি রয়েছে যেখানে আপনি Android-কে একটি রিসোর্স প্রি-স্কেল করতে চান না। প্রাক-স্কেলিং এড়ানোর সবচেয়ে সহজ উপায় হল nodpi কনফিগারেশন কোয়ালিফায়ার সহ একটি রিসোর্স ডিরেক্টরিতে রিসোর্স রাখা। যেমন:

    res/drawable-nodpi/icon.png

    যখন সিস্টেমটি এই ফোল্ডার থেকে icon.png বিটম্যাপ ব্যবহার করে, তখন এটি বর্তমান ডিভাইসের ঘনত্বের উপর ভিত্তি করে স্কেল করে না।

  2. পিক্সেল মাত্রা এবং স্থানাঙ্কের স্বতঃ-স্কেলিং

    আপনি ম্যানিফেস্টে android:anyDensity কে "false" সেট করে বা Bitmap জন্য প্রোগ্রামেটিকভাবে inScaled "false" এ সেট করে প্রাক-স্কেল করার মাত্রা এবং চিত্রগুলি অক্ষম করতে পারেন। এই ক্ষেত্রে, সিস্টেম ড্রয়ের সময়ে যেকোন পরম পিক্সেল স্থানাঙ্ক এবং পিক্সেল মাত্রা মান স্বয়ংক্রিয়ভাবে স্কেল করে। এটি নিশ্চিত করার জন্য এটি করে যে পিক্সেল-সংজ্ঞায়িত স্ক্রীন উপাদানগুলি এখনও প্রায় একই শারীরিক আকারে প্রদর্শিত হয় যা বেসলাইন পিক্সেল ঘনত্বে (mdpi) প্রদর্শিত হতে পারে। সিস্টেমটি অ্যাপে স্বচ্ছভাবে এই স্কেলিং পরিচালনা করে এবং ফিজিক্যাল পিক্সেল মাত্রার পরিবর্তে অ্যাপে স্কেল করা পিক্সেলের মাত্রা রিপোর্ট করে।

    উদাহরণস্বরূপ, ধরুন একটি ডিভাইসে একটি WVGA উচ্চ-ঘনত্বের স্ক্রীন রয়েছে, যা 480x800 এবং প্রায় একটি প্রথাগত HVGA স্ক্রীনের মতো একই আকারের—কিন্তু এটি এমন একটি অ্যাপ চালাচ্ছে যা প্রাক-স্কেলিং অক্ষম করেছে। এই ক্ষেত্রে, সিস্টেমটি অ্যাপে "মিথ্যা" বলে যখন এটি স্ক্রীনের মাত্রার জন্য অনুসন্ধান করে এবং 320x533 রিপোর্ট করে, পিক্সেল ঘনত্বের জন্য আনুমানিক mdpi অনুবাদ।

    তারপরে, যখন অ্যাপটি আঁকার ক্রিয়াকলাপ করে, যেমন (10,10) থেকে (100, 100) আয়তক্ষেত্রকে অবৈধ করা, সিস্টেমটি স্থানাঙ্কগুলিকে উপযুক্ত পরিমাণে স্কেলিং করে রূপান্তরিত করে এবং প্রকৃতপক্ষে অঞ্চলটিকে (15,15) থেকে অবৈধ করে। (150, 150)। যদি আপনার অ্যাপটি সরাসরি স্কেল করা বিটম্যাপকে ম্যানিপুলেট করে তাহলে এই অপ্রত্যাশিত আচরণের কারণ হতে পারে, তবে অ্যাপের সর্বোত্তম কার্যক্ষমতা নিশ্চিত করার জন্য এটি একটি যুক্তিসঙ্গত ট্রেড-অফ বলে মনে করা হয়। আপনি যদি এই পরিস্থিতির সম্মুখীন হন, তাহলে dp ইউনিটকে পিক্সেল ইউনিটে রূপান্তর করুন পড়ুন।

    সাধারণত, আপনি প্রাক-স্কেলিং অক্ষম করবেন না । একাধিক স্ক্রিন সমর্থন করার সর্বোত্তম উপায় হল এই পৃষ্ঠায় বর্ণিত মৌলিক কৌশলগুলি অনুসরণ করা।

যদি আপনার অ্যাপটি বিটম্যাপ পরিচালনা করে বা অন্য কোনো উপায়ে স্ক্রিনে পিক্সেলের সাথে সরাসরি ইন্টারঅ্যাক্ট করে, তাহলে আপনাকে বিভিন্ন পিক্সেল ঘনত্ব সমর্থন করার জন্য অতিরিক্ত পদক্ষেপ নিতে হতে পারে। উদাহরণস্বরূপ, যদি আপনি একটি আঙ্গুলের ক্রস করা পিক্সেলের সংখ্যা গণনা করে স্পর্শ অঙ্গভঙ্গির প্রতিক্রিয়া জানান, তাহলে আপনাকে প্রকৃত পিক্সেলের পরিবর্তে উপযুক্ত ঘনত্ব-স্বাধীন পিক্সেল মান ব্যবহার করতে হবে, তবে আপনি dp এবং px মানগুলির মধ্যে রূপান্তর করতে পারেন।

সমস্ত পিক্সেল ঘনত্বের উপর পরীক্ষা করুন

বিভিন্ন পিক্সেল ঘনত্ব সহ একাধিক ডিভাইসে আপনার অ্যাপ পরীক্ষা করুন যাতে আপনি আপনার UI স্কেল সঠিকভাবে নিশ্চিত করতে পারেন। সম্ভব হলে একটি শারীরিক ডিভাইসে পরীক্ষা করা; আপনার যদি বিভিন্ন পিক্সেল ঘনত্বের জন্য ভৌত ডিভাইসগুলিতে অ্যাক্সেস না থাকে তবে Android এমুলেটর ব্যবহার করুন৷

আপনি যদি শারীরিক ডিভাইসে পরীক্ষা করতে চান কিন্তু ডিভাইসগুলি কিনতে না চান, তাহলে আপনি Google ডেটা সেন্টারে ডিভাইসগুলি অ্যাক্সেস করতে Firebase টেস্ট ল্যাব ব্যবহার করতে পারেন।