সমর্থন প্রদর্শন cutouts

রচনা পদ্ধতি চেষ্টা করুন
জেটপ্যাক কম্পোজ হল Android এর জন্য প্রস্তাবিত UI টুলকিট। কম্পোজে ডিসপ্লে কাটআউটের সাথে কীভাবে কাজ করবেন তা শিখুন।

একটি ডিসপ্লে কাটআউট হল কিছু ডিভাইসের একটি এলাকা যা ডিসপ্লে পৃষ্ঠের মধ্যে প্রসারিত হয়। ডিভাইসের সামনে গুরুত্বপূর্ণ সেন্সরগুলির জন্য স্থান প্রদান করার সময় এটি প্রান্ত থেকে প্রান্তের অভিজ্ঞতার জন্য অনুমতি দেয়।

অ্যান্ড্রয়েড অ্যান্ড্রয়েড 9 (এপিআই লেভেল 28) এবং উচ্চতর ডিভাইসে ডিসপ্লে কাটআউট সমর্থন করে। যাইহোক, ডিভাইস নির্মাতারা অ্যান্ড্রয়েড 8.1 বা তার নিচের ডিভাইসে ডিসপ্লে কাটআউট সমর্থন করতে পারে।

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

টপ-সেন্টার ডিসপ্লে কাটআউটের উদাহরণ দেখানো একটি ছবি
চিত্র 1. 1 ডিসপ্লে কাটআউট।

আপনার অ্যাপ কাটআউট এলাকাগুলি কীভাবে পরিচালনা করে তা চয়ন করুন৷

আপনি যদি আপনার বিষয়বস্তু একটি কাটআউট এলাকার সাথে ওভারল্যাপ করতে না চান, তাহলে সাধারণত আপনার বিষয়বস্তু স্ট্যাটাস বার এবং নেভিগেশন বারের সাথে ওভারল্যাপ না হয় তা নিশ্চিত করার জন্য যথেষ্ট। আপনি যদি কাটআউট এলাকায় রেন্ডার করছেন, তাহলে একটি DisplayCutout অবজেক্ট পুনরুদ্ধার করতে WindowInsetsCompat.getDisplayCutout() ব্যবহার করুন যাতে প্রতিটি কাটআউটের জন্য নিরাপদ ইনসেট এবং বাউন্ডিং বক্স থাকে। এই APIগুলি আপনাকে আপনার সামগ্রী কাটআউটের সাথে ওভারল্যাপ করে কিনা তা পরীক্ষা করতে দেয় যাতে আপনি প্রয়োজনে পুনরায় অবস্থান করতে পারেন।

আপনি কাটআউট এলাকার পিছনে বিষয়বস্তু রাখা আছে কিনা তা নির্ধারণ করতে পারেন। layoutInDisplayCutoutMode উইন্ডো লেআউট বৈশিষ্ট্য নিয়ন্ত্রণ করে কিভাবে আপনার সামগ্রী কাটআউট এলাকায় আঁকা হয়। আপনি নিম্নলিখিত মানগুলির একটিতে layoutInDisplayCutoutMode সেট করতে পারেন:

  • LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT : যখন ডিসপ্লে কাটআউট একটি সিস্টেম বারে থাকে তখন বিষয়বস্তু কাটআউট এলাকায় রেন্ডার হয়। অন্যথায়, উইন্ডোটি প্রদর্শন কাটআউটকে ওভারল্যাপ করে না; উদাহরণস্বরূপ, ল্যান্ডস্কেপ মোডে প্রদর্শিত হলে বিষয়বস্তু লেটারবক্স করা হতে পারে। যদি আপনার অ্যাপটি SDK 35 কে লক্ষ্য করে, তাহলে এটিকে অ-ভাসমান উইন্ডোগুলির জন্য ALWAYS হিসাবে ব্যাখ্যা করা হয়।
  • LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS : সামগ্রী সবসময় কাটআউট এলাকায় প্রসারিত করার অনুমতি দেওয়া হয়। যদি আপনার অ্যাপটি SDK 35 কে টার্গেট করে এবং একটি Android 15 ডিভাইসে চলমান থাকে, তাহলে একটি প্রান্ত-থেকে-প্রান্ত প্রদর্শন নিশ্চিত করার জন্য নন-ফ্লোটিং উইন্ডোগুলির জন্য এটিই একমাত্র অনুমোদিত মোড।
  • LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES : বিষয়বস্তু পোর্ট্রেট এবং ল্যান্ডস্কেপ উভয় মোডে কাটআউট এলাকায় রেন্ডার করে। ভাসমান জানালার জন্য ব্যবহার করবেন না। যদি আপনার অ্যাপটি SDK 35 কে লক্ষ্য করে, তাহলে এটিকে অ-ভাসমান উইন্ডোগুলির জন্য ALWAYS হিসাবে ব্যাখ্যা করা হয়।
  • LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER : সামগ্রী কখনই কাটআউট এলাকায় রেন্ডার হয় না। যদি আপনার অ্যাপটি SDK 35 কে লক্ষ্য করে, তাহলে এটিকে অ-ভাসমান উইন্ডোগুলির জন্য ALWAYS হিসাবে ব্যাখ্যা করা হয়।

আপনি কাটআউট মোড প্রোগ্রামগতভাবে বা আপনার কার্যকলাপে একটি শৈলী সেট করে সেট করতে পারেন। নিম্নলিখিত উদাহরণটি কার্যকলাপে LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES বৈশিষ্ট্য প্রয়োগ করার জন্য একটি শৈলী সংজ্ঞায়িত করে৷

<style name="ActivityTheme">
  <item name="android:windowLayoutInDisplayCutoutMode">
    shortEdges <!-- default, shortEdges, or never -->
  </item>
</style>

নিম্নলিখিত বিভাগগুলি আরও বিশদে বিভিন্ন কাটআউট মোড বর্ণনা করে।

ডিফল্ট আচরণ

যদি আপনার অ্যাপটি SDK 35 টার্গেট করে এবং একটি Android 15 ডিভাইসে চলমান থাকে, তাহলে LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS হল ডিফল্ট আচরণ এবং LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT কে LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS এর জন্য ফ্লোটিং উইন্ডো হিসাবে ব্যাখ্যা করা হয়।

অন্যথায়, LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT ডিফল্ট।

ছোট প্রান্ত কাটআউট এলাকায় বিষয়বস্তু রেন্ডার

যদি আপনার অ্যাপটি SDK 35 কে লক্ষ্য করে এবং একটি Android 15 ডিভাইসে চলমান থাকে, তাহলে LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES নন-ফ্লোটিং উইন্ডোগুলির জন্য LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS হিসাবে ব্যাখ্যা করা হয়।

LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES এর সাথে, সিস্টেম বারগুলি লুকানো বা দৃশ্যমান হোক না কেন, বিষয়বস্তুটি প্রতিকৃতি এবং ল্যান্ডস্কেপ উভয় ক্ষেত্রে প্রদর্শনের ছোট প্রান্তে কাটআউট এলাকায় প্রসারিত হয়৷ এই মোড ব্যবহার করার সময়, নিশ্চিত করুন যে কোনও গুরুত্বপূর্ণ বিষয়বস্তু কাটআউট এলাকার সাথে ওভারল্যাপ না করে।

নিম্নলিখিত চিত্রটি প্রতিকৃতিতে একটি ডিভাইসের জন্য LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES এর একটি উদাহরণ:

পোর্ট্রেট মোডে থাকাকালীন কাটআউট এলাকায় সামগ্রী রেন্ডারিং দেখানো একটি চিত্র৷
চিত্র 2. প্রতিকৃতি মোডে থাকাকালীন কাটআউট এলাকায় সামগ্রী রেন্ডারিং।

নিম্নলিখিত চিত্রটি ল্যান্ডস্কেপের একটি ডিভাইসের জন্য LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES এর একটি উদাহরণ:

ল্যান্ডস্কেপ মোডে থাকাকালীন কাটআউট এলাকায় সামগ্রী রেন্ডারিং দেখানো একটি চিত্র৷
চিত্র 3. ল্যান্ডস্কেপ মোডে থাকা অবস্থায় কাটআউট এলাকায় সামগ্রী রেন্ডারিং।

এই মোডে, উইন্ডোটি পোর্ট্রেট এবং ল্যান্ডস্কেপ উভয় ক্ষেত্রে প্রদর্শনের ছোট প্রান্তে কাটআউটের নিচে প্রসারিত হয়, উইন্ডোটি সিস্টেম বারগুলিকে লুকিয়ে রাখছে কিনা তা বিবেচনা না করেই।

কোণে একটি কাটআউট সংক্ষিপ্ত প্রান্তে বলে মনে করা হয়:

কোণার কাটআউট সহ একটি ডিভাইস দেখানো একটি চিত্র৷
চিত্র 4. একটি কোণার কাটআউট সহ একটি ডিভাইস।

ডিসপ্লে কাটআউট এলাকায় কন্টেন্ট রেন্ডার করবেন না

যদি আপনার অ্যাপটি SDK 35 টার্গেট করে এবং একটি Android 15 ডিভাইসে চলছে, তাহলে LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER নন-ফ্লোটিং উইন্ডোগুলির জন্য LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS হিসাবে ব্যাখ্যা করা হয়।

LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER এর সাথে, উইন্ডোটিকে কখনই কাটআউট এলাকার সাথে ওভারল্যাপ করার অনুমতি দেওয়া হয় না।

নিম্নলিখিতটি প্রতিকৃতিতে LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER এর একটি উদাহরণ:

প্রতিকৃতির জন্য LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER দেখানো একটি চিত্র৷
চিত্র 5. পোর্ট্রেট মোডের জন্য LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER এর উদাহরণ৷

নিম্নলিখিতটি ল্যান্ডস্কেপ মোডে LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER এর একটি উদাহরণ:

ল্যান্ডস্কেপের জন্য LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER দেখানো একটি চিত্র৷
চিত্র 6. ল্যান্ডস্কেপ মোডে LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER এর উদাহরণ।

প্রদর্শন কাটআউট সমর্থনের জন্য সর্বোত্তম অনুশীলন

ডিসপ্লে কাটআউটগুলির সাথে কাজ করার সময়, নিম্নলিখিতগুলি বিবেচনা করুন:

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

    অনুপযুক্ত ইনসেট সেটআপের জন্য শীর্ষে কাটা সামগ্রী দেখানো একটি চিত্র৷
    চিত্র 7. ওভারল্যাপিং বা বিষয়বস্তু কাটা এড়াতে WindowInsetsCompat ব্যবহার করুন।
  • আপনার অ্যাপ কতটা উইন্ডো স্পেস ব্যবহার করছে তা নির্ধারণ করতে View.getLocationInWindow() ব্যবহার করুন। অনুমান করবেন না যে অ্যাপটি পুরো উইন্ডোটি ব্যবহার করছে এবং View.getLocationOnScreen() ব্যবহার করবেন না।

  • যদি আপনার অ্যাপকে ইমারসিভ মোডে এবং এর বাইরে স্থানান্তর করতে হয় তবে always , shortEdges বা never কাটআউট মোড ব্যবহার করুন৷ ডিফল্ট কাটআউট আচরণের কারণে আপনার অ্যাপের সামগ্রী কাটআউট এলাকায় রেন্ডার হতে পারে যখন সিস্টেম বারগুলি উপস্থিত থাকে, কিন্তু ইমারসিভ মোডে থাকা অবস্থায় নয়৷ এর ফলে ট্রানজিশনের সময় বিষয়বস্তু উপরে এবং নিচে চলে যায়, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে।

    ট্রানজিশনের সময় বিষয়বস্তু উপরে এবং নীচে সরানো দেখানো একটি চিত্র।
    চিত্র 8. ট্রানজিশনের সময় বিষয়বস্তু উপরে এবং নীচে সরানোর উদাহরণ।
  • ইমারসিভ মোডে, উইন্ডো বনাম স্ক্রীন কোঅর্ডিনেট ব্যবহারে সতর্কতা অবলম্বন করুন, যেহেতু লেটারবক্স করা অবস্থায় আপনার অ্যাপ পুরো স্ক্রীন ব্যবহার করে না। লেটারবক্সের কারণে, পর্দার উৎস থেকে স্থানাঙ্কগুলি উইন্ডোর উত্স থেকে স্থানাঙ্কের মতো নয়। আপনি getLocationOnScreen() ব্যবহার করে প্রয়োজন অনুসারে স্ক্রীন স্থানাঙ্কগুলিকে ভিউ এর স্থানাঙ্কে রূপান্তর করতে পারেন। নিচের চিত্রটি দেখায় যে বিষয়বস্তু লেটারবক্স করা হলে স্থানাঙ্কগুলি কীভাবে আলাদা হয়:

    যখন বিষয়বস্তু লেটারবক্স করা হয় তখন উইন্ডো বনাম স্ক্রীন সমন্বয়কারী একটি চিত্র দেখায়।
    চিত্র 9. কন্টেন্ট লেটারবক্স করা হলে উইন্ডো বনাম স্ক্রীন স্থানাঙ্ক।
  • MotionEvent পরিচালনা করার সময়, অনুরূপ সমন্বয় সমস্যা এড়াতে MotionEvent.getX() এবং MotionEvent.getY() ব্যবহার করুন। MotionEvent.getRawX() বা MotionEvent.getRawY() ব্যবহার করবেন না।

আপনার বিষয়বস্তু রেন্ডার কিভাবে পরীক্ষা করুন

আপনার অ্যাপের সমস্ত স্ক্রীন এবং অভিজ্ঞতা পরীক্ষা করুন। সম্ভব হলে বিভিন্ন ধরনের কাটআউট সহ ডিভাইসে পরীক্ষা করুন। আপনার কাছে কাটআউট সহ একটি ডিভাইস না থাকলে, আপনি নিম্নলিখিতগুলি করে Android 9 বা উচ্চতর চলমান যে কোনও ডিভাইস বা এমুলেটরে সাধারণ কাটআউট কনফিগারেশনগুলি অনুকরণ করতে পারেন:

  1. বিকাশকারী বিকল্পগুলি সক্ষম করুন৷
  2. বিকাশকারী বিকল্পগুলির স্ক্রিনে, অঙ্কন বিভাগে নীচে স্ক্রোল করুন এবং একটি কাটআউট সহ একটি প্রদর্শন অনুকরণ নির্বাচন করুন।
  3. কাটআউট টাইপ নির্বাচন করুন।

    এমুলেটরে একটি ডিসপ্লে কাটআউট কীভাবে অনুকরণ করা যায় তা দেখানো একটি চিত্র
    চিত্র 10. আপনার সামগ্রী কীভাবে রেন্ডার হয় তা পরীক্ষা করার জন্য বিকাশকারী বিকল্পগুলি৷

অতিরিক্ত সম্পদ