ডিভাইস কম্প্যাটিবিলিটি মোড

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

অ্যাপ-পিছু ওভাররাইড, ডিভাইস প্রস্তুতকারক, ভার্চুয়াল ডিভাইসের মালিক১ এবং ব্যবহারকারীদের অ্যাপের আচরণ পরিবর্তন করে অ্যাপ লেআউট উন্নত করতে বা নির্দিষ্ট ডিভাইসে অ্যাপ ভেঙে যাওয়া আটকাতে সাহায্য করে।

Android 16

Android 16 (API লেভেল ৩৬) স্ক্রিন ওরিয়েন্টেশন, অ্যাস্পেক্ট রেশিও এবং অ্যাপের সাইজ পরিবর্তন করার বিধিনিষেধ উপেক্ষা করে, যাতে সবচেয়ে কম প্রস্থ >= ৬০০dp সহ ফর্ম ফ্যাক্টরে অ্যাপের লেআউট উন্নত করা যায়।

API লেভেল ৩৬ টার্গেট করা অ্যাপের জন্য নিম্নলিখিত পার-অ্যাপ ওভাররাইড কাজ করে না:

অপ্ট-আউট করুন

আপনার অ্যাপ API লেভেল ৩৬-কে টার্গেট করতে পারে, কিন্তু Android 16 আচরণ থেকে বেরিয়ে আসতে পারে, সেক্ষেত্রে OVERRIDE_ANY_ORIENTATION_TO_USER প্রযোজ্য নয়।

ম্যানিফেস্ট প্রপার্টি ঘোষণা করা

API লেভেল ৩৬-এর আচরণ থেকে অপ্ট আউট করতে, PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY ম্যানিফেস্ট প্রপার্টিটি ডিক্লেয়ার করুন।

কোনো নির্দিষ্ট কার্যকলাপ থেকে বিরত থাকতে, <activity> এলিমেন্টে প্রপার্টিটি সেট করুন:

<activity ...>
    <property
        android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY"
        android:value="true" />
    ...
</activity>

আপনার সম্পূর্ণ অ্যাপের জন্য অপ্ট আউট করতে, <application> এলিমেন্টে প্রপার্টিটি সেট করুন:

<application ...>
    <property
        android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY"
        android:value="true" />
    ...
</application>

আপনার অ্যাপটি যদি অ্যান্ড্রয়েড ১৬ (এপিআই লেভেল ৩৬) বা তার উচ্চতর সংস্করণকে টার্গেট করে, তাহলে এই প্রপার্টিটি বড় ডিসপ্লেতে ডিসপ্লে ওরিয়েন্টেশন লক করে না বা স্ক্রিন রোটেশন প্রতিরোধ করে না ।

রেফারেন্স ডিভাইস

নিম্নলিখিত ডিভাইসগুলিতে অ্যাপ-পিছু ওভাররাইড করার প্রয়োজন হতে পারে কারণ সেগুলিতে অস্বাভাবিক কনফিগারেশন বা এমন কনফিগারেশন আছে যা অ্যাপে ভালভাবে কাজ করে না:

  • ট্যাবলেট: Pixel Tablet-এর মতো কিছু ট্যাবলেটের স্বাভাবিক ওরিয়েন্টেশন ল্যান্ডস্কেপ হয়। কোনও ডিভাইস তার স্বাভাবিক অবস্থানে থাকে যখন Display#getRotation() থেকে Surface.ROTATION_0 ভ্যালু পাওয়া যায়। অ্যাপ যদি ধরে নেয় যে ROTATION_0 হল পোর্ট্রেট, তাহলে অ্যাপ লেআউট ও ক্যামেরা প্রিভিউ ডিভাইসের ডিসপ্লের সাথে নাও মিলতে পারে।
  • ল্যান্ডস্কেপ ফোল্ড করা যায় এমন ডিভাইস: Pixel Fold-এর মতো কিছু ফোল্ড করা যায় এমন ডিভাইস ফোল্ড করা থাকলে সেগুলি পোর্ট্রেট ওরিয়েন্টেশনে থাকে, কিন্তু আনফোল্ড করা থাকলে ল্যান্ডস্কেপ ওরিয়েন্টেশনে থাকে। অ্যাপ যদি ধরে নেয় যে আনফোল্ড করা ওরিয়েন্টেশন হল পোর্ট্রেট, তাহলে ফ্লিকারিং লুপ বা লেআউট সংক্রান্ত সমস্যা হওয়ার সম্ভাবনা থাকে।
  • ফোল্ড করা যায় এমন ফ্লিপ ফোন: আনফোল্ড করা ফ্লিপ ফোন সাধারণত পোর্ট্রেট ওরিয়েন্টেশনে থাকে। তবে, ফোল্ড করা অবস্থায়, ফোনগুলিতে সাধারণত ল্যান্ডস্কেপ ওরিয়েন্টেশনে একটি ছোট ডিসপ্লে থাকে। ডিসপ্লের বিভিন্ন অরিয়েন্টেশন অ্যাপকে শনাক্ত করতে ও মানিয়ে নিতে হবে।
  • এক্সটার্নাল ডিসপ্লে: বেছে নেওয়া ডিভাইস, কানেক্ট করা এক্সটার্নাল ডিসপ্লেতে ডেস্কটপ উইন্ডোয়িং সেশন শুরু করতে পারে। অ্যাপগুলিকে অবশ্যই স্ক্রিনের সাইজ ও রেজোলিউশনের মতো তথ্যের জন্য এক্সটার্নাল ডিসপ্লে কোয়েরি করতে হবে; অন্যথায়, অ্যাপগুলি ডিসপ্লে সম্পর্কে ভুল অনুমান করতে পারে, যার ফলে অ্যাপের ব্যবহার ভুল হতে পারে।
  • গাড়ির ডিসপ্লে: অনেক, তবে সব নয়, গাড়ির ডিসপ্লে ল্যান্ডস্কেপ মোডে থাকে। গাড়ির ডিসপ্লের জন্য পার্ক করা অ্যাপ ডেভেলপ করা ট্যাবলেটের জন্য ডেভেলপ করার মতোই।

সামঞ্জস্য সংক্রান্ত সাধারণ সমস্যা

অ্যাপের অভিযোজন সংক্রান্ত বিধিনিষেধ, রিসাইজ করা ও অ্যাস্পেক্ট রেশিও সংক্রান্ত বিধিনিষেধ, ক্যামেরা প্রিভিউ অভিযোজনের ভুল হ্যান্ডেলিং এবং API-এর অপব্যবহারের কারণে অ্যাপগুলি সবচেয়ে বেশি মানানসই হওয়া সংক্রান্ত সমস্যার সম্মুখীন হয়।

লেটারবক্সিং

লেটারবক্সিং স্ক্রিনের কেন্দ্রে অ্যাপটিকে পজিশন করে অথবা বড় স্ক্রিনে, সহজ অ্যাক্সেসের জন্য একপাশে বা অন্যপাশে পজিশন করে। ম্যাট (একই রঙের বার বা অস্পষ্ট ওয়ালপেপার) অ্যাপের দু'পাশে বা উপরে ও নিচে অব্যবহৃত ডিসপ্লে এরিয়া পূরণ করে।

বড় স্ক্রিনের ডিভাইসে প্রায়ই লেটারবক্সিং হয় কারণ ডিভাইসের ডিসপ্লের ডাইমেনশন ও অ্যাস্পেক্ট রেশিও সাধারণত স্ট্যান্ডার্ড ফোনের থেকে আলাদা হয়, যার জন্য বেশিরভাগ অ্যাপ ডিজাইন করা হয়।

ছবি ১. অ্যাপ পোর্ট্রেট ওরিয়েন্টেশনে সীমাবদ্ধ থাকলে, ল্যান্ডস্কেপ ট্যাবলেট ও ফোল্ডেবল ডিভাইসে লেটারবক্সিং করা হয়।

সমস্যা

অ্যাপটি সব ডিসপ্লে কনফিগারেশনে কাজ করে না কারণ অ্যাপটির নির্দিষ্ট ওরিয়েন্টেশন, নির্দিষ্ট অ্যাস্পেক্ট রেশিও আছে অথবা এটি রিসাইজ করা যায় না।

অ্যাপের ওরিয়েন্টেশন ও রিসাইজ করার ক্ষমতা নিয়ন্ত্রণ করে এমন কনফিগারেশন সেটিংসের মধ্যে নিম্নলিখিত বিষয়গুলি অন্তর্ভুক্ত:

  • screenOrientation: কোনও অ্যাপের জন্য নির্দিষ্ট ওরিয়েন্টেশন উল্লেখ করে। এছাড়াও, অ্যাপ Activity#setRequestedOrientation() ব্যবহার করে রানটাইমে ওরিয়েন্টেশন সেট করতে পারে।

  • resizeableActivity: বিভিন্ন আকারের উইন্ডোতে ফিট করার জন্য সিস্টেম অ্যাপের সাইজ পরিবর্তন করতে পারবে কিনা তা নির্দেশ করে। Android 11 (API লেভেল ৩০) ও এর আগের যেকোনও ভার্সনে, অ্যাপ মাল্টি-উইন্ডো মোডে কাজ করে কিনা তা নির্দিষ্ট করে। Android 12 (API লেভেল 31) ও এর পরের যেকোনও ভার্সনে, ছোট স্ক্রিনে (কমপ্যাক্ট উইন্ডো সাইজ ক্লাস) অ্যাপ মাল্টি‑উইন্ডো মোডে কাজ করে কিনা তা উল্লেখ করে। Android 12 ও তার পরবর্তী যেকোনও ভার্সনে, এই সেটিং যাই হোক না কেন, বড় স্ক্রিনে অ্যাপ মাল্টি-উইন্ডো মোডে কাজ করে (মাঝারি বা বড় উইন্ডো সাইজ ক্লাস)।

  • maxAspectRatio: অ্যাপের সাথে মানানসই সর্বাধিক অ্যাস্পেক্ট রেশিও নির্দিষ্ট করে। শুধুমাত্র false-এ সেট করা resizeableActivity সহ অ্যাপ maxAspectRatio সেট করতে পারে।

  • minAspectRatio: অ্যাপে কাজ করে এমন ন্যূনতম অ্যাস্পেক্ট রেশিও নির্দিষ্ট করে । শুধুমাত্র false-এ সেট করা resizeableActivity সহ অ্যাপই minAspectRatio সেট করতে পারে।

অপ্টিমাইজেশন

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

কম্প্যাটিবিলিটি সংক্রান্ত সমস্যার সমাধান

ফিক্সড ওরিয়েন্টেশন বা ফিক্সড অ্যাস্পেক্ট রেশিও সহ কোনও অ্যাপ যদি এমন উইন্ডোতে চলে যেখানে অ্যাপটি সরাসরি উইন্ডোর সাইজ বা ওরিয়েন্টেশন সাপোর্ট করে না, তাহলে নিরবচ্ছিন্নতা বজায় রাখতে Android অ্যাপটিকে লেটারবক্স করে।

Android 12 (API লেভেল ৩১) থেকে শুরু করে 12L (API লেভেল ৩২) পর্যন্ত, লেটারবক্স করা অ্যাপে প্ল্যাটফর্ম বিভিন্ন ধরনের এনহ্যান্সমেন্ট প্রয়োগ করে। ডিভাইস নির্মাতারা UI সংক্রান্ত উন্নতি প্রয়োগ করেন। উন্নতি থেকে সুবিধা পেতে, আপনার অ্যাপের জন্য আপনাকে কোনও অতিরিক্ত ডেভেলপমেন্ট করতে হবে না।

Android 12 (API লেভেল ৩১) নিম্নলিখিত নান্দনিক উন্নতি নিয়ে এসেছে, যা ডিভাইস প্রস্তুতকারক কনফিগার করতে পারেন:

  • গোলাকার কোণ: অ্যাপ উইন্ডোর কোণগুলি আরও পরিমার্জিত লুক পেয়েছে।
  • সিস্টেম বারের স্বচ্ছতা: অ্যাপের উপর ওভারলে করা স্ট্যাটাস ও নেভিগেশন বার সেমিট্রান্সপারেন্ট হয়, এর ফলে লেটারবক্স ব্যাকগ্রাউন্ডের উপর বারের আইকনগুলি সবসময় দেখা যায়।
  • কনফিগার করা যায় এমন অ্যাস্পেক্ট রেশিও: অ্যাপের অ্যাস্পেক্ট রেশিও অ্যাডজাস্ট করা যায় যাতে অ্যাপের চেহারা আরও ভালো হয়।

ছবি ২. UI উন্নত করা হয়েছে এমন লেটারবক্সড অ্যাপ।

12L (API লেভেল ৩২) নিম্নলিখিত কার্যকরী উন্নতি যোগ করে:

  • কনফিগার করা যায় এমন পজিশনিং: বড় স্ক্রিনে, ডিভাইস প্রস্তুতকারক ডিসপ্লের বাম বা ডানদিকে অ্যাপের পজিশন সেট করতে পারেন, এর ফলে ইন্টার‍্যাকশন আরও সহজ হয়।

  • রিস্টার্ট বোতামের নতুন ডিজাইন: ডিভাইস প্রস্তুতকারকরা সাইজ কম্প্যাটিবিলিটি মোডের জন্য রিস্টার্ট বোতামকে নতুন লুক দিতে পারেন যাতে ব্যবহারকারীরা আরও ভালোভাবে চিনতে পারেন।

Android 13 (API লেভেল 33) স্ক্রিনে লেটারবক্সড অ্যাপ পজিশন করা বা স্প্লিট‑স্ক্রিন মোডে লেটারবক্স অন্তর্ভুক্ত করা সম্পর্কে ব্যবহারকারীকে শিক্ষিত করার জন্য একটি ডায়ালগ যোগ করে:

ছবি ৩. ব্যবহারকারীকে তথ্য জানানোর ডায়ালগ সহ লেটারবক্স করা অ্যাপ।

সাইজ কম্প্যাটিবিলিটি মোড

সাইজ কম্প্যাটিবিলিটি মোড হল লেটারবক্সিং যা অ্যাপের অ্যাস্পেক্ট রেশিও বজায় রাখে এবং রিস্টার্ট কন্ট্রোল অন্তর্ভুক্ত করে। কন্ট্রোল ব্যবহারকারীদের অ্যাপ রিস্টার্ট করতে এবং ডিসপ্লে আবার আঁকতে দেয়। যেসব অ্যাপের সাইজ পরিবর্তন করা যায় না, Android সেগুলির জন্য সাইজ কম্প্যাটিবিলিটি মোড ইনভোক করে। কোনও অ্যাক্টিভিটি যখন এমন ডিসপ্লে কন্টেনারে চলে যায় যা অ্যাক্টিভিটির ডাইমেনশনের সাথে মানানসই নয়, তখন সিস্টেম অ্যাপটিকে রিস্কেল করে ডিভাইসের ডিসপ্লেতে অন্তত একটি ডাইমেনশন পূরণ করতে পারে।

ডিভাইস কনফিগারেশনে এমন পরিবর্তন যা সাইজ কম্প্যাটিবিলিটি মোড ট্রিগার করতে পারে, এর মধ্যে নিম্নলিখিত বিষয়গুলি অন্তর্ভুক্ত:

  • ডিভাইসের ঘূর্ণন
  • ফোল্ড করা যায় এমন ডিভাইস ফোল্ড বা আনফোল্ড করা
  • ফুল স্ক্রিন ও স্প্লিট-স্ক্রিন ডিসপ্লে মোডের মধ্যে পরিবর্তন করা

সমস্যা

সাইজ কম্প্যাটিবিলিটি মোড সাধারণত সেইসব অ্যাক্টিভিটির ক্ষেত্রে প্রযোজ্য যেগুলি অরিয়েন্টেশন বা অ্যাস্পেক্ট রেশিওতে সীমাবদ্ধ এবং যেগুলি রি-সাইজ করা যায় না বলে কনফিগার করা (বা সিস্টেমের মাধ্যমে নির্ধারিত) হয়।

আপনার অ্যাপকে রিসাইজ করা যায় বলে বিবেচনা করা হবে—এবং এটি সাইজ কম্প্যাটিবিলিটি মোডে রাখা হবে না—যদি এটি নিম্নলিখিত মানদণ্ডগুলির মধ্যে কোনও একটি পূরণ করে:

আপনার অ্যাপ যদি কোনও শর্ত পূরণ না করে, তাহলে এটি রিসাইজ করার উপযুক্ত নয় বলে বিবেচিত হবে এবং এটি সাইজ কম্প্যাটিবিলিটি মোডে রাখা হতে পারে।

অপ্টিমাইজেশন

অ্যাপকে সব ডিসপ্লে সাইজের সাথে মানানসই হতে হবে। অ্যাপ ম্যানিফেস্টে <activity> বা <application> এলিমেন্টের android:resizeableActivity অ্যাট্রিবিউটকে true হিসেবে সেট করে আপনার অ্যাপের সাইজ পরিবর্তনযোগ্য করে তুলুন। আপনার অ্যাপের জন্য রেসপন্সিভ/অ্যাডাপ্টিভ লেআউট ডিজাইন করুন। আরও তথ্যের জন্য, দেখুন বিভিন্ন ডিসপ্লে সাইজ সাপোর্ট করে এবং মাল্টি-উইন্ডো মোড সাপোর্ট করে।

কম্প্যাটিবিলিটি সংক্রান্ত সমস্যার সমাধান

Android কোনও অ্যাপকে সাইজ কম্প্যাটিবিলিটি মোডে রাখে, যখন সিস্টেম নির্ধারণ করে যে লেটারবক্স করা অ্যাপের ডিসপ্লে অন্তত একটি ডাইমেনশনে ডিসপ্লে উইন্ডো পূরণ করার জন্য অ্যাপের সাইজ পরিবর্তন করে উন্নত করা যেতে পারে। সিস্টেম একটি রিস্টার্ট কন্ট্রোল দেখায় যা অ্যাপ প্রসেস আবার তৈরি করে, অ্যাক্টিভিটি আবার তৈরি করে এবং ডিসপ্লে আবার আঁকে। এছাড়াও, প্রসেস ও থ্রেডের ওভারভিউ দেখুন।

ডিসপ্লে কম্প্যাটিবিলিটি মোড

ডিসপ্লে কম্প্যাটিবিলিটি মোড, কোনও অ্যাপকে বিভিন্ন ডিসপ্লের মধ্যে সরানোর সময় রিস্টার্ট হওয়া থেকে আটকায়, যা কালার মোড, টাচস্ক্রিনের উপলভ্যতা বা স্ক্রিন ডেনসিটি পরিবর্তনের মতো কনফিগারেশন পরিবর্তনকে ট্রিগার করতে পারে।

স্থিতিশীলতা ও নিরবচ্ছিন্নতা উন্নত করতে গেমের জন্য ডিফল্ট হিসেবে ডিসপ্লে কম্প্যাটিবিলিটি মোড চালু করা হয় (এটি android:appCategory ফ্ল্যাগের উপর ভিত্তি করে করা হয়)। সাইজ কম্প্যাটিবিলিটি মোডের মতো, ডিসপ্লে কম্প্যাটিবিলিটি মোড অ্যাপের কনফিগারেশন ফ্রিজ করে না। অ্যাপটি এখনও onConfigurationChanged() কলব্যাকের মতো API-এর মাধ্যমে সমস্ত কনফিগারেশন আপডেট পেতে পারে, তবে বাধা সৃষ্টিকারী রিস্টার্ট থেকে এটি রক্ষা পায়। এর অর্থ হল, যেসব গেম সঠিকভাবে API-কে সাপোর্ট করে, যেমন onConfigurationChanged(), সেগুলি এখনও নিজেদের UI আপডেট করতে পারে, এমনকি যদি সেগুলি ডিসপ্লে কম্প্যাটিবিলিটি মোডে থাকে।

ডিসপ্লে কম্প্যাটিবিলিটি মোড থেকে বেরিয়ে আসতে এবং আপনার অ্যাপে কনফিগারেশন সংক্রান্ত পরিবর্তন ম্যানেজ করতে, অ্যাপের AndroidManifest.xml ফাইলে কনফিগারেশন সংক্রান্ত পরিবর্তনের জন্য সহায়তা ঘোষণা করুন এবং onConfigurationChanged() কলব্যাকে কনফিগারেশন সংক্রান্ত পরিবর্তন ম্যানেজ করুন।

<activity
    android:name=".MyGameActivity"
    android:configChanges="colorMode|touchscreen|density|...">
    ...
</activity>

ফ্লিকারিং লুপ

কোনও অ্যাপ যদি সব ডিসপ্লে ওরিয়েন্টেশন সাপোর্ট না করে, তাহলে কনফিগারেশনে পরিবর্তন হলে সেটি বারবার নতুন ওরিয়েন্টেশনের অনুরোধ করতে পারে। এর ফলে একটি অসীম লুপ তৈরি হয় যার জন্য ডিসপ্লে ফ্লিকার করতে বা অ্যাপটি অনবরত রোটেট করতে থাকে।

সমস্যা

Android 12 (API লেভেল 31) ও এর পরবর্তী যেকোনও ভার্সনে, ডিভাইস প্রস্তুতকারক তাদের ডিভাইস কনফিগার করতে পারে যাতে অ্যাপের নির্দিষ্ট করা ওরিয়েন্টেশন সংক্রান্ত বিধিনিষেধ উপেক্ষা করা যায় এবং এর পরিবর্তে কম্প্যাটিবিলিটি মোড প্রয়োগ করা যায়। যেমন, কোনও অ্যাক্টিভিটি ডিভাইসের ল্যান্ডস্কেপ ট্যাবলেট-সাইজ, ভেতরের স্ক্রিনে দেখানো হলে, ফোল্ড করা যায় এমন ডিভাইস অ্যাক্টিভিটির android:screenOrientation="portrait" সেটিং উপেক্ষা করতে পারে।

কোনও অ্যাপের ওরিয়েন্টেশন সংক্রান্ত বিধিনিষেধ উপেক্ষা করা হলে, অ্যাপটি প্রোগ্র্যামাটিক উপায়ে Activity#setRequestedOrientation() কল করে নিজের ওরিয়েন্টেশন সেট করতে পারে। অ্যাপ যদি কনফিগারেশন পরিবর্তন ম্যানেজ না করে (দেখুন কনফিগারেশন পরিবর্তন ম্যানেজ করা), তাহলে কল অ্যাপ রিস্টার্ট করার ট্রিগার করে। রিস্টার্ট করার পরে, অ্যাপের ওরিয়েন্টেশন সংক্রান্ত বিধিনিষেধ আবার উপেক্ষা করা হয়, অ্যাপটি setRequestedOrientation()-কে আবার কল করে, কলটি অ্যাপ রিস্টার্ট করার ট্রিগার করে এবং এই ধরনের ঘটনা একটি অবিরাম লুপে চলতে থাকে।

আপনি অন্যভাবে এটি দেখতে পেতে পারেন, যখন কোনও ডিভাইসের স্ক্রিনের প্রাকৃতিক ওরিয়েন্টেশন (Android-এর দ্বারা নির্ধারিত সাধারণ ওরিয়েন্টেশন) ল্যান্ডস্কেপ হয় (অর্থাৎ, কলিং Display#getRotation() থেকে Surface.ROTATION_0 রিটার্ন করে, যেখানে ডিভাইসের ল্যান্ডস্কেপ অ্যাস্পেক্ট রেশিও থাকে)। ঐতিহাসিকভাবে, অ্যাপগুলি ধরে নিয়েছে যে Display.getRotation() = Surface.ROTATION_0 মানে ডিভাইসটি পোর্ট্রেট ওরিয়েন্টেশনে আছে, কিন্তু এটি সবসময় হয় না, যেমন, কিছু ফোল্ড করা যায় এমন ডিভাইসের ভিতরের স্ক্রিনে এবং কিছু ট্যাবলেটে।

ফোল্ড করা যায় এমন ডিভাইসের ভিতরের ডিসপ্লেতে ল্যান্ডস্কেপ ওরিয়েন্টেশনে থাকা কোনও অ্যাপ, স্ক্রিন রোটেশন চেক করতে পারে, ROTATION_0 ভ্যালু পেতে পারে, ডিভাইসের স্বাভাবিক ওরিয়েন্টেশন পোর্ট্রেট হিসেবে ধরে নিতে পারে এবং অ্যাপ লেআউট আবার কনফিগার করতে setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT ) কল করতে পারে। অ্যাপ রিস্টার্ট হওয়ার পরে (ল্যান্ডস্কেপ ওরিয়েন্টেশনে), এটি আবার স্ক্রিন রোটেশন চেক করতে পারে, ROTATION_0 ভ্যালু পেতে পারে, setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) কল করতে পারে এবং অনন্ত লুপ চালিয়ে যেতে পারে।

অপ্টিমাইজেশন

অ্যাপের নিম্নলিখিত কাজগুলি করা উচিত নয়:

  • Activity#setRequestedOrientation()-এর মাধ্যমে অ্যাক্টিভিটি onCreate() পদ্ধতিতে ডিফল্ট ওরিয়েন্টেশন সেট করুন, কারণ হ্যান্ডেল না করা কনফিগারেশন পরিবর্তনের ফলে অপ্রত্যাশিতভাবে ওরিয়েন্টেশন অনুরোধ ট্রিগার হতে পারে
  • ডিভাইসের স্বাভাবিক ওরিয়েন্টেশন (ROTATION_0) পোর্ট্রেট হিসেবে ধরে নিন
  • বর্তমান উইন্ডোর সাইজের সাথে সম্পর্কিত নয় এমন সিগন্যালের উপর ভিত্তি করে ওরিয়েন্টেশন সেট করুন, যেমন Display#getRotation(), কোনও FoldingFeature-এর উপস্থিতি অথবা পুরনো API.

কম্প্যাটিবিলিটি সংক্রান্ত সমস্যার সমাধান

নিচে উল্লেখ করা পরিস্থিতিগুলিতে Android Activity#setRequestedOrientation()-এ কল ইগনোর করে:

  • মেথডে আগের কল থেকে অ্যাক্টিভিটি আবার চালু করা হয়েছে অথবা ক্যামেরা কম্প্যাট ফোর্স রোটেশন ট্রিটমেন্ট চালু করা হয়েছে (নিচে ক্যামেরা প্রিভিউ দেখুন)।

    ডিভাইস প্রস্তুতকারক OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION-এর মাধ্যমে কোনও অ্যাপে এই আচরণ প্রয়োগ করতে পারেন।

  • অ্যাক্টিভিটি এক সেকেন্ডে দুটির বেশি অরিয়েন্টেশন অনুরোধ করেছে, যা লুপ তৈরি হওয়ার ইঙ্গিত দেয়। লুপে থাকা দুটি অনুরোধের মধ্যে, Android সেটি ব্যবহার করে যা অ্যাপ ডিসপ্লে এরিয়াকে সর্বাধিক করে।

    ডিভাইস প্রস্তুতকারক OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED-এর মাধ্যমে কোনও অ্যাপে এই আচরণ প্রয়োগ করতে পারেন।

  • ভার্চুয়াল ডিভাইসের মালিকরা বেছে নেওয়া ডিভাইসে মেথড কল ওভাররাইড করেছেন।

ক্যামেরা প্রিভিউ

ট্যাবলেট, ল্যাপটপ ও ফোল্ড করা যায় এমন ডিসপ্লেতে ক্যামেরা অ্যাপের ক্যামেরা প্রিভিউ (বা ভিউফাইন্ডার) অ্যালাইন করা নাও থাকতে পারে বা বিকৃত হতে পারে।

এছাড়াও ডেস্কটপ উইন্ডোয় ক্যামেরা প্রিভিউ দেখুন।

সমস্যা

Android মানানসই হওয়ার সংজ্ঞা সংক্রান্ত ডকুমেন্টে বলা হয়েছে যে ক্যামেরা ইমেজ সেন্সরকে "অবশ্যই এমনভাবে ওরিয়েন্ট করতে হবে যাতে ক্যামেরার দীর্ঘতম ডাইমেনশন স্ক্রিনের দীর্ঘতম ডাইমেনশনের সাথে অ্যালাইন করে"।

অ্যাপগুলি প্রায়ই ধরে নেয় যে ডিভাইস ও ক্যামেরা সেন্সরের ওরিয়েন্টেশন পোর্ট্রেট—সাধারণ মোবাইল ফোনে এটি যুক্তিসঙ্গত অনুমান। কিন্তু ট্যাবলেট ও ল্যাপটপের স্বাভাবিক অরিয়েন্টেশন এবং সেগুলির ক্যামেরা সেন্সর ল্যান্ডস্কেপ হতে পারে। এছাড়াও, ফোল্ড করা যায় এমন ডিভাইসের মতো নতুন ফর্ম ফ্যাক্টরে একাধিক স্বাভাবিক ওরিয়েন্টেশন ও বিভিন্ন ওরিয়েন্টেশনে একাধিক ক্যামেরা সেন্সর থাকতে পারে।

অ্যাপটি আশা করে না এমন ক্যামেরা ওরিয়েন্টেশন দিয়ে অ্যাক্টিভিটি শুরু করলে অথবা বিভিন্ন ক্যামেরা বা ডিভাইস স্ক্রিনের (ফোল্ড করা যায় এমন ডিভাইসের ক্ষেত্রে) মধ্যে পরিবর্তন করলে ক্যামেরা প্রিভিউ অ্যালাইনমেন্টে সমস্যা হতে পারে বা সেটি বিকৃত হয়ে যেতে পারে।

অপ্টিমাইজেশন

ক্যামেরা অ্যাপকে অবশ্যই ডিভাইস ওরিয়েন্টেশন এবং ক্যামেরা সেন্সর ওরিয়েন্টেশন সঠিকভাবে শনাক্ত ও ম্যানেজ করতে হবে, যাতে সঠিকভাবে অ্যালাইন করা ও স্কেল করা ক্যামেরা প্রিভিউ দেখানো যায়। অ্যাপগুলিকে অবশ্যই ডিভাইস রোটেশন, সেন্সর রোটেশন এবং স্ক্রিন বা উইন্ডোর অ্যাস্পেক্ট রেশিও গণনা করতে হবে এবং তারপরে ফলাফলগুলি ক্যামেরা প্রিভিউতে প্রয়োগ করতে হবে। বিস্তারিত নির্দেশাবলীর জন্য, ক্যামেরা প্রিভিউ এবং ক্যামেরা ভিউফাইন্ডার সম্পর্কে জানুন দেখুন।

কম্প্যাটিবিলিটি সংক্রান্ত সমস্যার সমাধান

Display#getRotation() Surface.ROTATION_0 রিটার্ন করলে, ডিভাইসটি স্বাভাবিক ওরিয়েন্টেশনে থাকে। ডিভাইসের স্বাভাবিক অরিয়েন্টেশন থেকে CameraCharacteristics.SENSOR_ORIENTATION সিস্টেম গণনা করে। Android, পোর্ট্রেট‑বিধিনিষেধযুক্ত অ্যাপের পোর্ট্রেট উইন্ডোকে ডিভাইসের স্বাভাবিক ওরিয়েন্টেশনের সাথে অ্যালাইন করে, যা অধিকাংশ অ্যাপ আশা করে। এছাড়াও, Android ক্যামেরা সেন্সর ইমেজ ক্রপ করে যখন সেন্সর ওরিয়েন্টেশন ল্যান্ডস্কেপ এবং ক্যামেরা প্রিভিউ পোর্ট্রেট হয়। নির্দিষ্ট ওয়ার্কঅ্যারাউন্ডের মধ্যে নিম্নলিখিত বিষয়গুলি অন্তর্ভুক্ত:

  • পোর্ট্রেট-বিধিনিষেধযুক্ত অ্যাপের জন্য ক্যামেরা প্রিভিউ জোর করে রোটেট করা: পোর্ট্রেট ওরিয়েন্টেশনে সীমাবদ্ধ অ্যাপগুলি ডিভাইসের স্বাভাবিক ওরিয়েন্টেশন এবং ক্যামেরা সেন্সর ওরিয়েন্টেশন পোর্ট্রেট হবে বলে আশা করে। তবে, Android 12 (API লেভেল 31) ও এর পরবর্তী যেকোনও ভার্সনে, ডিভাইস প্রস্তুতকারক যদি অরিয়েন্টেশন স্পেসিফিকেশন উপেক্ষা করে, তাহলে অ্যাপ একাধিক ডিভাইস অরিয়েন্টেশনে চলতে পারে।

    কোনও পোর্ট্রেট-বিধিনিষেধযুক্ত অ্যাপ ক্যামেরার সাথে কানেক্ট করা হলে, Android অ্যাপের পোর্ট্রেট উইন্ডোকে ডিভাইসের স্বাভাবিক অরিয়েন্টেশনের সাথে অ্যালাইন করার জন্য অ্যাপটিকে জোর করে রোটেট করে।

    কিছু ট্যাবলেটে (রেফারেন্স ডিভাইস দেখুন), অ্যাপের পোর্ট্রেট উইন্ডোটি ডিভাইসের ন্যাচারাল ওরিয়েন্টেশনের সাথে অ্যালাইন করার জন্য ফুল-স্ক্রিন পোর্ট্রেটে রোটেট করা হয়। ফোর্স রোটেট করার পরে অ্যাপটি পুরো স্ক্রিন জুড়ে দেখা যায়।

    ফোল্ড করা যায় এমন ডিভাইসের ল্যান্ডস্কেপ ইন্টার্নাল স্ক্রিনে (রেফারেন্স ডিভাইস দেখুন), শুধুমাত্র পোর্ট্রেট মোডে কাজ করে এমন অ্যাক্টিভিটি আনফোল্ড করা স্বাভাবিক ওরিয়েন্টেশনের সাথে অ্যালাইন করতে ল্যান্ডস্কেপে রোটেট করা হয়। জোর করে রোটেট করার পরে অ্যাপটি লেটারবক্সড হয়ে যায়।

  • ভেতরের সামনের ক্যামেরা ক্রপিং: কিছু ফোল্ডেবল ডিভাইসে ভেতরের সামনের ক্যামেরা সেন্সর ল্যান্ডস্কেপ ওরিয়েন্টেশনে থাকে। ফোল্ড করা যায় এমন ডিভাইসের ভিতরের ডিসপ্লেতে ক্যামেরা প্রিভিউ জোর করে রোটেট করা ছাড়াও, Android ভিতরের সামনের দিকের (ল্যান্ডস্কেপ) ক্যামেরার ফিল্ড অফ ভিউ ক্রপ করে যাতে সেন্সর ডিভাইস ওরিয়েন্টেশনের বিপরীত ভিউ ক্যাপচার করতে পারে।

  • ক্যামেরা প্রিভিউ জোর করে রিফ্রেশ করা: ক্যামেরা প্রিভিউ যাতে ঠিকমতো দেখানো যায় তা নিশ্চিত করতে, জোর করে রোটেট করার পরে সিস্টেম অ্যাক্টিভিটি মেথড onStop() ও onStart() (ডিফল্ট হিসেবে) অথবা onPause() ও onResume() (প্রতি অ্যাপ ওভাররাইড OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE ব্যবহার করে প্রয়োগ করা হয়) সাইকেল করে।

  • অ্যাস্পেক্ট রেশিও স্কেলিং: সিস্টেম, জোর করে রোটেট করা ক্যামেরা প্রিভিউয়ের অ্যাস্পেক্ট রেশিওকে ডায়নামিক পদ্ধতিতে পরিবর্তন করে একটি বেশি ন্যূনতম অ্যাস্পেক্ট রেশিওতে নিয়ে যায়, যা ক্যামেরা প্রিভিউ সঠিকভাবে স্কেল করা হয়েছে তা নিশ্চিত করে।

অ্যাপ ডেভেলপাররা এই বিকল্প পদ্ধতিগুলি ওভাররাইড করতে পারেন যদি অ্যাপগুলি ক্যামেরা প্রিভিউ সঠিকভাবে ম্যানেজ করে। প্রতি-অ্যাপ ওভাররাইড দেখুন।

সাধারণত অপব্যবহার করা API

Android-এ মাল্টি‑উইন্ডো মোড ও ফোল্ড করা যায় এমন ডিভাইসের মতো ফিচারের জন্য সহায়তা যোগ করা হয়েছে। এর ফলে, লেগ্যাসি API আর ব্যবহার করা হয় না এবং তার পরিবর্তে লেটেস্ট API ব্যবহার করা হয় যা সব ডিসপ্লের সাইজ ও ডিভাইস ফর্ম ফ্যাক্টরের জন্য কাজ করে। তবে, পুরনো ভার্সনের সাথে সামঞ্জস্যপূর্ণ হওয়ার জন্য বন্ধ করে দেওয়া API এখনও উপলভ্য আছে।

কিছু View API বিশেষ উদ্দেশ্যে ডিজাইন করা হয় যা ডেভেলপাররা সবসময় ভালভাবে বুঝতে পারেন না।

সমস্যা

ডেভেলপাররা এখনও পুরনো Display API ব্যবহার করছেন এবং ভুলভাবে ধরে নিচ্ছেন যে API ডিভাইসের ডিসপ্লে এরিয়া বাউন্ডের পরিবর্তে অ্যাপ বাউন্ড রিটার্ন করে। অথবা ডেভেলপাররা ভুল করে সাধারণ ডিসপ্লে মেট্রিক পাওয়ার জন্য বিশেষ‑উদ্দেশ্য ভিউ API ব্যবহার করেন। অ্যাপ উইন্ডো রিসাইজিং ইভেন্টের পরে UI এলিমেন্ট রিপজিশন করার সময় ভুল গণনা করা হয়, এর ফলে লেআউট সংক্রান্ত সমস্যা হয়।

অননুমোদিত ও সাধারণত অপব্যবহার করা ডিসপ্লে API:

আরও তথ্যের জন্য, মাল্টি-উইন্ডো মোড কাজ করে দেখুন।

ভিউ API-এর অপব্যবহার:

অপ্টিমাইজেশন

UI এলিমেন্ট পজিশন করার জন্য কখনওই ফিজিক্যাল ডিসপ্লে সাইজের উপর নির্ভর করবেন না। WindowMetrics-এর উপর ভিত্তি করে আপনার অ্যাপকে API-তে মাইগ্রেট করুন, এর মধ্যে নিম্নলিখিত WindowManager API অন্তর্ভুক্ত:

কম্প্যাটিবিলিটি সংক্রান্ত সমস্যার সমাধান

দুটি ওভাররাইড, অ্যাপ বাউন্ড রিটার্ন করতে পুরনো Display API এবং অপব্যবহার করা View API অ্যাডজাস্ট করে: Display API-এর জন্য ALWAYS_SANDBOX_DISPLAY_APIS ; View API-এর জন্য OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS। এছাড়াও, সাইজ কম্প্যাটিবিলিটি মোডের জন্য উপযুক্ত অ্যাপে ডিফল্ট হিসেবে ALWAYS_SANDBOX_DISPLAY_APIS প্রয়োগ করা হয়।

স্বচ্ছ অ্যাক্টিভিটি

স্বচ্ছ ব্যাকগ্রাউন্ড স্টাইলের ফলে স্বচ্ছ অ্যাক্টিভিটি তৈরি হয়, যেমন এইসব:

<style name="Transparent" parent="AppTheme">
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
</style>

Theme.MaterialComponents.Dialog-এর মতো ডায়ালগ সম্পর্কিত থিম, অ্যাক্টিভিটি ট্রান্সপারেন্ট করে এমন স্টাইল অন্তর্ভুক্ত করতে পারে।

ট্রান্সপারেন্ট অ্যাক্টিভিটি উপলভ্য ডিসপ্লে স্পেসের সব অংশ জুড়ে থাকে না, এর ফলে সেগুলি ম্যানেজ করা কঠিন হয়ে পড়ে কারণ ডিভাইস রোটেট করা, ডিভাইস ফোল্ড ও আনফোল্ড করা এবং মাল্টি‑উইন্ডো মোডের মতো কনফিগারেশন পরিবর্তনের উপর ভিত্তি করে উপলভ্য ডিসপ্লে এরিয়া পরিবর্তন হতে পারে।

সমস্যা

স্বচ্ছ অ্যাক্টিভিটিকে টাস্ক অ্যাক্টিভিটি স্ট্যাকে স্বচ্ছ অ্যাক্টিভিটির নিচে থাকা প্রথম অস্বচ্ছ অ্যাক্টিভিটির সীমার মধ্যে থাকতে হবে। তবে, অনুমতি ডায়ালগ লঞ্চ করে এমন অস্বচ্ছ অ্যাক্টিভিটি ট্র্যাম্পোলিন (এমন অ্যাক্টিভিটি যা অন্য অ্যাক্টিভিটি লঞ্চ করে তারপর অদৃশ্য হয়ে যায়) হতে পারে; এবং তাই, সিস্টেম ট্র্যাম্পোলিন অ্যাক্টিভিটির বাউন্ড নির্ধারণ করতে পারে না যা স্বচ্ছ অনুমতি ডায়ালগ অ্যাক্টিভিটি লঞ্চ করেছে।

অপ্টিমাইজেশন

স্বচ্ছ অ্যাক্টিভিটি, টাস্কের অ্যাক্টিভিটি স্ট্যাকে তার নিচে থাকা সবচেয়ে বেশি অস্বচ্ছ অ্যাক্টিভিটি থেকে তার সীমাবদ্ধতা উত্তরাধিকার সূত্রে পায়। স্বচ্ছ অ্যাক্টিভিটির সম্পূর্ণ লাইফসাইকেল জুড়ে, অ্যাক্টিভিটি তৈরি থেকে ধ্বংস পর্যন্ত, অস্বচ্ছ অ্যাক্টিভিটি উপলভ্য থাকতে হবে। এই কারণে, ট্র্যাম্পোলিন অ্যাক্টিভিটি থেকে অনুমতির অনুরোধ লঞ্চ করবেন না।

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

ব্যবহারকারী অনুমতি সংক্রান্ত সিদ্ধান্ত না নেওয়া পর্যন্ত দৃশ্যমান থাকে এমন অ্যাক্টিভিটি থেকে অ্যাপকে সবসময় অনুমতির অনুরোধ লঞ্চ করতে হবে।

গোলাকার কোণ

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

অনুমতি সংক্রান্ত ডায়ালগ উপলভ্য ডিসপ্লে স্পেস পূরণ করে না কারণ ডায়ালগ লেআউট সাধারণত LayoutParams.WRAP_CONTENT ব্যবহার করে, এর পরিবর্তে LayoutParams.MATCH_PARENT ব্যবহার করে না।

কম্প্যাটিবিলিটি সংক্রান্ত সমস্যার সমাধান

ব্যবহারকারী ডায়ালগের উত্তর না দেওয়া পর্যন্ত ডায়ালগ অ্যাক্টিভিটি লঞ্চ করা অ্যাক্টিভিটি দৃশ্যমান রাখুন।

সিস্টেম এটি নিশ্চিত করে যে একটি স্বচ্ছ অ্যাক্টিভিটি অ্যাক্টিভিটি স্ট্যাকে স্বচ্ছ অ্যাক্টিভিটির নিচে থাকা প্রথম অস্বচ্ছ অ্যাক্টিভিটি থেকে সমস্ত বিধিনিষেধ উত্তরাধিকার সূত্রে পায়, এর মধ্যে এগুলি সম্পর্কিত বিধিনিষেধ অন্তর্ভুক্ত:

  • সাইজ কম্প্যাটিবিলিটি মোড
  • সজ্জা
  • অ্যাসপেক্ট রেশিও

Unity গেম

Unity গেম Android ফুল স্ক্রিন বা মাল্টি‑উইন্ডো মোডে চলে। তবে, অ্যাপটি মাল্টি‑উইন্ডো মোডে রাখলে, অনেক Unity গেম ফোকাস হারায় এবং কন্টেন্ট ড্র করা বন্ধ করে দেয়।

সমস্যা

Android-এ মাল্টি-উইন্ডো মোড কাজ করানোর জন্য Unity 2019.4-এ Unity একটি Resizable Window বিকল্প যোগ করেছে। তবে, প্রাথমিক প্রয়োগ মাল্টি-উইন্ডো মোডে অ্যাক্টিভিটি লাইফসাইকেলে সঠিকভাবে প্রতিক্রিয়া জানায়নি, এর ফলে অ্যাপ ফোকাস হারালে UnityPlayer প্লেব্যাক সাসপেন্ড করে দেয়। প্লেয়ারে কালো স্ক্রিন বা গেমের শেষ, ফ্রিজ করা ফ্রেম দেখা যাচ্ছে। ব্যবহারকারী স্ক্রিনে ট্যাপ করলে তবেই গেমপ্লে আবার চালু হয়। Unity ইঞ্জিন ব্যবহার করা অনেক অ্যাপে এই সমস্যা দেখা যায় এবং একাধিক উইন্ডো মোডে কালো উইন্ডো হিসেবে রেন্ডার হয়।

অপ্টিমাইজেশন

Unity-কে 2019.4.40 বা তার পরবর্তী যেকোনও ভার্সনে আপগ্রেড করুন এবং আপনার গেম আবার এক্সপোর্ট করুন। Android Player সেটিংস মেনুতে Resizable Window বিকল্পটি চেক করা আছে কিনা দেখুন, তা না হলে মাল্টি‑উইন্ডো মোডে গেমটি সম্পূর্ণ দেখা গেলেও ফোকাসে না থাকলে গেমটি পজ হয়ে যাবে।

কম্প্যাটিবিলিটি সংক্রান্ত সমস্যার সমাধান

ডিভাইস প্রস্তুতকারক মাল্টি‑উইন্ডো মোডে কোনও অ্যাপকে নকল ফোকাস ইভেন্ট প্রদান করতে OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS প্রতি‑অ্যাপ ওভাররাইড প্রয়োগ করতে পারেন। ওভাররাইড করলে অ্যাক্টিভিটি কন্টেন্ট আবার আঁকতে পারে এবং সেটি কালো হয়ে যায় না।

ডেস্কটপ উইন্ডোইং

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

লক করা ওরিয়েন্টেশন সহ অ্যাপের সাইজ ইচ্ছামতো পরিবর্তন করা যায়। কোনও অ্যাক্টিভিটি পোর্ট্রেট ওরিয়েন্টেশনে লক করা থাকলেও ব্যবহারকারীরা অ্যাপের সাইজ পরিবর্তন করে ল্যান্ডস্কেপ ওরিয়েন্টেশনে নিয়ে যেতে পারবেন।

ল্যান্ডস্কেপে রিসাইজ করা হচ্ছে এমন পোর্ট্রেট অ্যাপের অ্যানিমেশন।

তবে, কোনও অ্যাক্টিভিটিকে রিসাইজ করা যায় না বলে ঘোষণা করা হলে (resizeableActivity = false), অ্যাক্টিভিটি UI স্কেল করার সময় একই অ্যাস্পেক্ট রেশিও বজায় রাখে।

অ্যাপের সাইজ পরিবর্তন করার অ্যানিমেশন। ডেস্কটপ উইন্ডো ভর্তি করার জন্য UI স্কেল করা হয়।

ডেস্কটপ উইন্ডোইংয়ে ক্যামেরা প্রিভিউ

ডেস্কটপ উইন্ডোয়িংয়ে কোনও অ্যাপ চললে, ডিসপ্লে রোটেশন ও উইন্ডো ওরিয়েন্টেশন, স্ট্যান্ডার্ড ফোনে ফুলস্ক্রিনে যা দেখা যায় তার থেকে আলাদা হতে পারে।

সমস্যা

অ্যাপগুলি প্রায়ই ধরে নেয় যে ডিভাইস ও ক্যামেরা সেন্সরের ওরিয়েন্টেশন পোর্ট্রেট মোডে আছে, এর ফলে ক্যামেরা প্রিভিউ ভুলভাবে অ্যালাইন করা বা বিকৃত হতে পারে।

অপ্টিমাইজেশন

ক্যামেরা অ্যাপকে অবশ্যই ডিভাইস ওরিয়েন্টেশন এবং ক্যামেরা সেন্সর ওরিয়েন্টেশন সঠিকভাবে শনাক্ত ও ম্যানেজ করতে হবে, যাতে সঠিকভাবে অ্যালাইন করা ও স্কেল করা ক্যামেরা প্রিভিউ দেখানো যায়। অ্যাপগুলিকে অবশ্যই ডিভাইস রোটেশন, সেন্সর রোটেশন এবং উইন্ডো অ্যাস্পেক্ট রেশিও গণনা করতে হবে, এবং তারপরে ফলাফলগুলি ক্যামেরা প্রিভিউতে প্রয়োগ করতে হবে, যা উইন্ডো কনফিগারেশন পরিবর্তনের প্রতিক্রিয়াও দেখাবে। বিস্তারিত নির্দেশিকার জন্য, ক্যামেরা প্রিভিউ দেখুন।

কম্প্যাটিবিলিটি সংক্রান্ত সমস্যার সমাধান

ডেস্কটপ উইন্ডোয় ফিক্সড-ওরিয়েন্টেশন অ্যাপ ক্যামেরা প্রিভিউ শুরু করলে, সিস্টেমটি ক্যামেরা কম্প্যাটিবিলিটি ট্রিটমেন্ট ট্রিগার করতে পারে যাতে প্রিভিউ স্ট্রেচ করা বা সাইডওয়েজ না হয়ে যায়।

নিম্নলিখিত উপায়ে অনুরোধ করা ওরিয়েন্টেশনের সাথে ম্যাচ করাতে ট্রিটমেন্ট এনভায়রনমেন্টকে স্যান্ডবক্স করে:

  • অনুরোধ করা অরিয়েন্টেশনে অ্যাপ উইন্ডো লেটারবক্স করুন: এটি অনুপযুক্ত স্কেলিংয়ের কারণে স্ট্রেচিং সংক্রান্ত সমস্যা এড়াতে করা হয়।

  • ডিসপ্লে রোটেশন স্যান্ডবক্স করা: অনুরোধ করা ওরিয়েন্টেশনে রাখা ডিভাইসের মতো ট্রিটমেন্ট সিমুলেট করে। ক্যামেরা প্রিভিউয়ের ক্ষেত্রে সবচেয়ে সাধারণ ভুল ধারণা হল অ্যাপটি পোর্ট্রেট ডিভাইসে চলছে, ডিসপ্লে রোটেট করার জন্য পোর্ট্রেট ওরিয়েন্টেশনের অনুরোধ করা অ্যাপের ক্ষেত্রে স্যান্ডবক্সিং করে ০ ডিগ্রি এবং ল্যান্ডস্কেপ ওরিয়েন্টেশনের অনুরোধ করা ডিভাইসের ক্ষেত্রে ৯০ ডিগ্রি করা হয়।

  • ক্যামেরা ক্রপিং: ডিসপ্লে রোটেশন পরিবর্তন করা হলে, এটি ক্যামেরা ফিডে প্রতিফলিত হয়: কোনও ডিভাইস ল্যান্ডস্কেপ ওরিয়েন্টেশনে থাকলে এবং পোর্ট্রেট ওরিয়েন্টেশনের অনুরোধ করা কোনও অ্যাপের জন্য ট্রিটমেন্ট ট্রিগার করা হলে, ক্যামেরা ফিল্ড অফ ভিউ ক্রপ করে পোর্ট্রেট-ওরিয়েন্টেড ক্যামেরার মতো করে নেওয়া হয়।

  • ক্যামেরা ফিড রোটেট ও ক্রপ করা: ক্যামেরা প্রিভিউ সঠিকভাবে দেখানো হচ্ছে কিনা তা নিশ্চিত করতে, ট্রিটমেন্ট প্রয়োগ করার পরে সিস্টেম অ্যাক্টিভিটি মেথড onStop() ও onStart() (ডিফল্ট হিসেবে) অথবা onPause() ও onResume() (প্রতি অ্যাপ ওভাররাইড করা OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE-এর মাধ্যমে প্রয়োগ করা হয়) সাইকেল করে।

অ্যাপ ডেভেলপাররা এই বিকল্প পদ্ধতিগুলি ওভাররাইড করতে পারেন যদি অ্যাপগুলি ক্যামেরা প্রিভিউ সঠিকভাবে ম্যানেজ করে। প্রতি-অ্যাপ ওভাররাইড দেখুন।

ছোট বড় করা হচ্ছে

অনুরোধ করা সিমুলেটেড ওরিয়েন্টেশন ট্রিটমেন্ট অ্যাক্টিভ থাকলে, উইন্ডোর সাইজ পরিবর্তন করলে ভিউফাইন্ডার UI-এর সাইজও পরিবর্তিত হয়, তবে এর অ্যাস্পেক্ট রেশিও একই থাকে। অ্যাপ উইন্ডোর বাকি অংশ ফ্রিলি রিসাইজ করা যাবে।

মানানসই সংক্রান্ত সমস্যার জন্য আপনার অ্যাপ পরীক্ষা করা

আপনার অ্যাপ পরীক্ষা করতে এবং বিভিন্ন ফর্ম ফ্যাক্টরে এটি কীভাবে আচরণ করে তা বুঝতে, নিম্নলিখিত রিসোর্সগুলি ব্যবহার করুন:

লেটারবক্স করা আছে

যাচাই করে দেখুন যে প্রতিটি অ্যাক্টিভিটি অ্যাপের জন্য উপলভ্য ডিসপ্লে স্পেসের সবকটি ব্যবহার করতে পারে কিনা। প্রথমে, আপনার টেস্ট ফোল্ডারে নিম্নলিখিত কোড ঘোষণা করুন:

Kotlin

fun isLetterboxed(activity: AppCompatActivity): Boolean {
    if (isInMultiWindowMode) return false

    val wmc = WindowMetricsCalculator.getOrCreate()
    val currentBounds = wmc.computeCurrentWindowMetrics(this).bounds
    val maxBounds = wmc.computeMaximumWindowMetrics(this).bounds

    val isScreenPortrait = maxBounds.height() > maxBounds.width()

    return if (isScreenPortrait) {
        currentBounds.height() < maxBounds.height()
    } else {
        currentBounds.width() < maxBounds.width()
    }
}

জাভা

public boolean isLetterboxed(AppCompatActivity activity) {
    if (activity.isInMultiWindowMode()) {
        return false;
    }

    WindowMetricsCalculator wmc = WindowMetricsCalculator.getOrCreate();
    Rect currentBounds = wmc.computeCurrentWindowMetrics(activity).getBounds();
    Rect maxBounds = wmc.computeMaximumWindowMetrics(activity).getBounds();

    boolean isScreenPortrait = maxBounds.height() > maxBounds.width();

    return (isScreenPortrait)
        ? currentBounds.height() < maxBounds.height()
        : currentBounds.width() < maxBounds.width();
}

তারপর, আচরণ নিশ্চিত করতে একটি পরীক্ষা চালান এবং টার্গেট অ্যাক্টিভিটি যাতে লেটারবক্সড না হয় তা নিশ্চিত করুন:

Kotlin

@get:Rule
val activityRule = ActivityScenarioRule(MainActivity::class.java)

@Test
fun activity_launched_notLetterBoxed() {
    activityRule.scenario.onActivity {
        assertFalse(it.isLetterboxed())
    }
}

জাভা

@Rule
public ActivityScenarioRule<MainActivity> rule = new ActivityScenarioRule<>(MainActivity.class);

@Test
public void activity_launched_notLetterBoxed() {
    try (ActivityScenario<MainActivity> scenario =
        ActivityScenario.launch(MainActivity.class)) {
            scenario.onActivity( activity -> {
                assertFalse(activity.isLetterboxed());
            });
        }
}

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

প্রতি অ্যাপের ওভাররাইড

Android এমন ওভাররাইড প্রদান করে যা অ্যাপের কনফিগার করা আচরণ পরিবর্তন করে। যেমন, FORCE_RESIZE_APP ওভাররাইড, সাইজ কম্প্যাটিবিলিটি মোড বাইপাস করতে এবং ডিসপ্লে ডাইমেনশন ফিট করার জন্য অ্যাপের সাইজ পরিবর্তন করতে সিস্টেমকে নির্দেশ দেয়, এমনকি অ্যাপ ম্যানিফেস্টে resizeableActivity="false" উল্লেখ করা থাকলেও এটি করা হয়।

ডিভাইস প্রস্তুতকারক নির্দিষ্ট ডিভাইসে বেছে নেওয়া অ্যাপ—বা সব অ্যাপ—ওভাররাইড প্রয়োগ করে। Android 14 (API লেভেল 34) ও এর পরের যেকোনও ভার্সনে, ব্যবহারকারীরা ডিভাইস সেটিংসের মাধ্যমে অ্যাপে ওভাররাইড প্রয়োগ করতে পারবেন। Android 16 (API লেভেল 36) ও এর পরের যেকোনও ভার্সনে, ভার্চুয়াল ডিভাইস মালিকরা বেছে নেওয়া ডিভাইসে ওভাররাইড প্রয়োগ করেন যেগুলি ভার্চুয়াল ডিভাইস মালিকরা ম্যানেজ করেন।

ব্যবহারকারী পিছু অ্যাপ ওভাররাইড

Android 14 ও তার পরের যেকোনও ভার্সনে, সেটিংস মেনু ব্যবহারকারীদের অ্যাপের অ্যাস্পেক্ট রেশিও পরিবর্তন করতে দেয়। রেফারেন্স ডিভাইসের মতো বড় স্ক্রিন ডিভাইস মেনু প্রয়োগ করে।

ডিভাইসে ইনস্টল করা সব অ্যাপের তালিকা মেনুতে থাকে। ব্যবহারকারী একটি অ্যাপ বেছে নেন এবং তারপর ডিভাইস প্রস্তুতকারকের কনফিগার করা অ্যাপের অ্যাস্পেক্ট রেশিও ৩:৪, ১:১, ফুল স্ক্রিন বা অন্য কোনও ভ্যালু সেট করেন। এছাড়াও, ব্যবহারকারীরা অ্যাস্পেক্ট রেশিও রিসেট করে অ্যাপ ডিফল্টে সেট করতে পারবেন, যা অ্যাপ ম্যানিফেস্টে উল্লেখ করা আছে।

অ্যাপ নিম্নলিখিত PackageManager.Property ট্যাগ সেট করে কম্প্যাটিবিলিটি ওভাররাইড থেকে অপ্ট-আউট করতে পারে:

  • PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE

    ব্যবহারকারীর অ্যাস্পেক্ট রেশিও সংক্রান্ত মানানসই ওভাররাইড থেকে বেরিয়ে আসতে, আপনার অ্যাপ মেনিফেস্টে প্রপার্টি যোগ করুন এবং ভ্যালু false হিসেবে সেট করুন:

    <application>
        <property
            android:name="android.window.
            PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE"
            android:value="false" />
    </application>
    

    ডিভাইস সেটিংসের অ্যাপের তালিকা থেকে আপনার অ্যাপ বাদ দেওয়া হবে। ব্যবহারকারীরা অ্যাপের অ্যাস্পেক্ট রেশিও ওভাররাইড করতে পারবেন না।

    প্রপার্টি true হিসেবে সেট করলে কোনও প্রভাব পড়ে না।

  • PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_FULLSCREEN_OVERRIDE

    ব্যবহারকারীর অ্যাস্পেক্ট রেশিও সামঞ্জস্যপূর্ণ ওভাররাইড করার ফুল-স্ক্রিন বিকল্প থেকে বেরিয়ে আসতে, আপনার অ্যাপ ম্যানিফেস্টে প্রপার্টি যোগ করুন এবং ভ্যালু false হিসেবে সেট করুন:

    <application>
        <property
            android:name="android.window.PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_FULLSCREEN_OVERRIDE"
            android:value="false" />
    </application>
    

    ডিভাইস সেটিংসের অ্যাস্পেক্ট রেশিও বিকল্পের তালিকা থেকে ফুল-স্ক্রিন বিকল্পটি সরিয়ে দেওয়া হয়েছে। ব্যবহারকারীরা আপনার অ্যাপে ফুল-স্ক্রিন ওভাররাইড প্রয়োগ করতে পারবেন না।

    এই প্রপার্টিকে true হিসেবে সেট করলে কোনও প্রভাব পড়ে না।

সব স্ক্রিনের জন্য আপনার অ্যাপ অপ্টিমাইজ করুন: আপনার অ্যাপে অ্যাসপেক্ট রেশিও সংক্রান্ত বিধিনিষেধ সেট করবেন না। উপলভ্য ডিসপ্লে স্পেসের পরিমাণের উপর ভিত্তি করে বিভিন্ন লেআউট কাজ করানোর জন্য উইন্ডো সাইজ ক্লাস ব্যবহার করুন।

ডিভাইস প্রতি অ্যাপ ওভাররাইড

ডিভাইস প্রস্তুতকারক ও ভার্চুয়াল ডিভাইসের মালিকরা (বেছে নেওয়া বিশ্বস্ত ও বিশেষ সুবিধা প্রাপ্ত অ্যাপ) নির্দিষ্ট ডিভাইসে অ্যাপ‑পিছু ওভাররাইড প্রয়োগ করে, এর মধ্যে ট্যাবলেট, ফোল্ড করা যায় এমন ডিভাইস, ChromeOS ডিভাইস ও গাড়ির ডিসপ্লে অন্তর্ভুক্ত। রেফারেন্স ডিভাইস ডিফল্ট হিসেবে বিভিন্ন অ্যাপে কিছু ওভাররাইড প্রয়োগ করতে পারে।

অ্যাপ বেশিরভাগ ওভাররাইড থেকে অপ্ট-আউট করতে পারে (নিচে প্রতি-অ্যাপ ওভাররাইড টেবিল দেখুন)।

আপনি মানানসই ফ্রেমওয়ার্ক (মানানসই ফ্রেমওয়ার্ক টুল দেখুন) ব্যবহার করে ওভাররাইড চালু বা বন্ধ করে আপনার অ্যাপ পরীক্ষা করতে পারবেন। চালু করা হলে, ওভাররাইডগুলি পুরো অ্যাপের ক্ষেত্রে প্রযোজ্য হয়।

এছাড়াও, আপনি Android Debug Bridge (adb) ব্যবহার করে ওভাররাইড চালু বা বন্ধ করতে এবং আপনার অ্যাপে কোন ওভাররাইড প্রযোজ্য তা নির্ধারণ করতে পারবেন।

নিম্নলিখিত উপায়ে ওভাররাইড চালু বা বন্ধ করুন:

adb shell am compat enable/disable <override name/id> <package>

রেফারেন্স ডিভাইসের জন্য, আপনার অ্যাপে কোন ওভাররাইড প্রযোজ্য তা চেক করুন:

adb shell dumpsys platform_compat | grep <package name>

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

প্রতি অ্যাপের ওভাররাইড
ধরন নাম আইডি বর্ণনা
ইনপুট কম্প্যাটিবিলিটি OVERRIDE_MOUSE_TO_TOUCH 413207127 MotionEvent সোর্স ও টুল টাইপ আবার লিখে, মাউস ডিভাইস থেকে পাওয়া MotionEvent ইনস্ট্যান্সকে টাচ ইভেন্টে কনভার্ট করে, যখন সেগুলি অ্যাপ্লিকেশনে ডেলিভার করা হয়।
আকার পরিবর্তনযোগ্যতা FORCE_RESIZE_APP 174042936 কনফিগারেশনে পরিবর্তন হলে অ্যাপের জন্য সাইজ কম্প্যাটিবিলিটি মোড বাইপাস করে।
FORCE_NON_RESIZE_APP 181136395 কনফিগারেশনে পরিবর্তন হলে অ্যাপকে সাইজ কম্প্যাটিবিলিটি মোডে বাধ্য করে।
অ্যাস্পেক্ট রেশিও OVERRIDE_MIN_ASPECT_RATIO 174042980 অন্যান্য অ্যাস্পেক্ট রেশিও ওভাররাইড প্রয়োগ করার জন্য গেটকিপার ওভাররাইড চালু করতে হবে।
OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY 203647190 চালু করা থাকলে (ডিফল্ট), সীমা ওভাররাইড করে শুধুমাত্র পোর্ট্রেট-অনলি অ্যাক্টিভিটি।
OVERRIDE_MIN_ASPECT_RATIO_SMALL 349045028 ন্যূনতম অ্যাস্পেক্ট রেশিও পরিবর্তন করে ৪:৩ করে।
OVERRIDE_MIN_ASPECT_RATIO_MEDIUM 180326845 ন্যূনতম অ্যাস্পেক্ট রেশিও পরিবর্তন করে ৩:২ করে দেয়।
OVERRIDE_MIN_ASPECT_RATIO_LARGE 180326787 ন্যূনতম অ্যাস্পেক্ট রেশিও পরিবর্তন করে ১৬:৯ করে।
OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN 208648326 ডিসপ্লে সাইজের ৫০% (বা স্প্লিট-স্ক্রিন অ্যাস্পেক্ট রেশিও) ফিট করার জন্য ন্যূনতম অ্যাস্পেক্ট রেশিও পরিবর্তন করে।
OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN 218959984 ন্যূনতম অ্যাস্পেক্ট রেশিও ওভাররাইড করার সুবিধা বন্ধ করে দেয়, যাতে ডিভাইস পোর্ট্রেট মোডে থাকলে অ্যাপগুলি ফুল-স্ক্রিন হয়।
সজ্জা OVERRIDE_ANY_ORIENTATION 265464455 যেকোনও ওরিয়েন্টেশন ওভাররাইড করার সুবিধা চালু করে।
OVERRIDE_ANY_ORIENTATION_TO_USER 310816437 এটি ছবি ঘোরানো, সাইজ পরিবর্তন করা ও অ্যাস্পেক্ট রেশিও সংক্রান্ত বিধিনিষেধ ওভাররাইড করে।
OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT 265452344 কোনও অ্যাক্টিভিটির ওরিয়েন্টেশন অনির্দিষ্ট হলে, সেটি পোর্ট্রেট হিসেবে ওভাররাইড করে।
OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR 265451093 কোনও অ্যাক্টিভিটির অনির্দিষ্ট ওরিয়েন্টেশন থাকলে, ওরিয়েন্টেশনকে ওভাররাইড করে nosensor (ডিভাইসের স্বাভাবিক ওরিয়েন্টেশন ব্যবহার করুন) করে দেয়।
OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE 266124927 শুধুমাত্র ল্যান্ডস্কেপ মোডে কাজ করে এমন অ্যাপ ১৮০ ডিগ্রি ঘোরানো হয়।
OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA 265456536 ক্যামেরার সাথে অ্যাপ কানেক্ট করা থাকাকালীন, ওরিয়েন্টেশন ওভাররাইড স্কোপ সীমিত করে।
OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION 255940284 কোনও টাস্ক ফুল স্ক্রিন (লেটারবক্স সহ) হলে ডিসপ্লেকে ফিক্সড ল্যান্ডস্কেপ ন্যাচারাল ওরিয়েন্টেশনে সেট করে।
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION 254631730 অসীম লুপে রোটেট করা এড়াতে অ্যাপ থেকে আসা ওরিয়েন্টেশন সংক্রান্ত অনুরোধ উপেক্ষা করে।
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED 273509367 কোনও অ্যাক্টিভিটি আবার চালু করার সময়, বারবার ওরিয়েন্টেশন সংক্রান্ত অনুরোধ উপেক্ষা করে। Android যদি শনাক্ত করে যে কোনও অ্যাপ এক সেকেন্ডের মধ্যে অন্তত দুটি নতুন ওরিয়েন্টেশনের অনুরোধ করছে, তাহলে সিস্টেম এটিকে একটি ইনফিনিট লুপ হিসেবে বিবেচনা করে এবং ওভাররাইড প্রয়োগ করে।
OVERRIDE_RESPECT_REQUESTED_ORIENTATION 236283604 ডিভাইস প্রস্তুতকারকের উপেক্ষা করা ওরিয়েন্টেশন অনুরোধ সেটিং বন্ধ করে লেটারবক্সিং প্রতিরোধ করে।
স্যান্ডবক্স API NEVER_SANDBOX_DISPLAY_APIS 184838306 কোনও ডিসপ্লে API-এর আচরণ পরিবর্তন করতে বাধা দেয়।
ALWAYS_SANDBOX_DISPLAY_APIS 185004937 Displayঅ্যাপের API-কে অ্যাপের বাউন্ডারি রিটার্ন করতে বাধ্য করে। Display API লজিক্যাল ডিসপ্লে এরিয়া বাউন্ড রিটার্ন করে, কিন্তু কখনও কখনও অ্যাপ ধরে নেয় যে Display API অ্যাপ বাউন্ড রিটার্ন করে, যার ফলে UI সংক্রান্ত সমস্যা হয়।
OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS 237531167 অ্যাপে ব্যবহৃত View API-কে অ্যাপের বাউন্ডারি রিটার্ন করতে বাধ্য করে। View API লজিক্যাল ডিসপ্লে এরিয়া বাউন্ড রিটার্ন করে, কিন্তু কখনও কখনও অ্যাপ ধরে নেয় যে View API অ্যাপ বাউন্ড রিটার্ন করে, যার ফলে UI সংক্রান্ত সমস্যা হয়।
ক্যামেরা কম্প্যাটিবিলিটি OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION 263959004 ফোর্স রোটেশন বন্ধ করে। ক্যামেরা প্রিভিউ খোলা থাকলে, ডিফল্ট হিসেবে সব ফিক্সড-ওরিয়েন্টেশন ক্যামেরা অ্যাপ জোর করে রোটেট করা হয়।
OVERRIDE_CAMERA_COMPAT_DISABLE_SIMULATE_REQUESTED_ORIENTATION 398195815 ক্যামেরার সাথে মানানসই হওয়ার জন্য অনুরোধ করা ওরিয়েন্টেশন ট্রিটমেন্টের সিমুলেশন বন্ধ করে দেয়। ক্যামেরা প্রিভিউ খোলা থাকলে, ডিফল্ট হিসেবে, ফিক্সড-ওরিয়েন্টেশন ক্যামেরা অ্যাপকে তার অনুরোধ করা ওরিয়েন্টেশনের উপর ভিত্তি করে অ্যাডজাস্ট করা হয়।
OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH 264304459 ক্যামেরা প্রিভিউ জোর করে রোটেট করা হলে প্রয়োগ করা ডিফল্ট হার্ড রিফ্রেশ সরিয়ে দেয়।
OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE 264301586 ক্যামেরা প্রিভিউ জোর করে রোটেট করা হলে, হার্ড রিফ্রেশকে সফট রিফ্রেশে পরিবর্তন করে, যা জোর করে রোটেট করার সময় স্টেটকে সুরক্ষিত রাখতে সাহায্য করে। ক্যামেরা প্রিভিউ জোর করে রোটেট করা হলে, Android ডিফল্ট হিসেবে হার্ড রিফ্রেশ প্রয়োগ করে। অ্যাপগুলি কীভাবে তাদের আগের অবস্থা ক্যাশে করেছে তার উপর নির্ভর করে হার্ড রিফ্রেশ করলে অ্যাপের অবস্থা হারিয়ে যাওয়া বা কালো হয়ে যাওয়ার মতো সমস্যা হতে পারে।
OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT 250678880 ইনার ফ্রন্ট ক্যামেরার ইমেজ বাফার ক্রপ করে। ওভাররাইড বন্ধ করা থাকলে, ইনার ফ্রন্ট ক্যামেরার ক্রপিং সরিয়ে দেওয়া হয় এবং ক্যামেরা প্রিভিউয়ের ফিল্ড অফ ভিউ বাড়ানো হয়। কিছু ফোল্ডেবল ডিভাইসে (রেফারেন্স ডিভাইস দেখুন) ডিফল্ট হিসেবে, ভিতরের ফ্রন্ট ক্যামেরা ব্যবহার করার সময় সিস্টেম সব ক্যামেরা অ্যাপের ক্যামেরা প্রিভিউ ক্রপ করে।
বিবিধ OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS 263259275 স্প্লিট-স্ক্রিন মোডে অ্যাপ ফোকাস হারালে, অ্যাপটি কালো হয়ে যাওয়া থেকে আটকায়। অ্যাপের কন্টেন্ট ড্র করার আগে অ্যাপ ফোকাসের জন্য অপেক্ষা করে, এর ফলে অ্যাপ ফ্রিজ হয়ে যেতে পারে বা স্ক্রিন কালো হয়ে যেতে পারে। ওভাররাইড করার ফলে Android অ্যাপে একটি নকল ফোকাস ইভেন্ট পাঠাতে পারে, যা অ্যাপকে আবার কন্টেন্ট ড্র করা শুরু করার জন্য সিগন্যাল দেয়।

OVERRIDE_MOUSE_TO_TOUCH

অ্যাপ্লিকেশনে মোশন ইভেন্ট ডেলিভার করা হলে, MotionEvent সোর্স থেকে SOURCE_TOUCHSCREEN এবং MotionEvent টুল টাইপ থেকে TOOL_TYPE_FINGER-এ রিরাইট করার মাধ্যমে মাউস বা টাচপ্যাড থেকে MotionEvent ইনস্ট্যান্সকে টাচ ইভেন্টে কনভার্ট করে কম্প্যাটিবিলিটি ট্রিটমেন্ট চালু করে।

ওভাররাইডের মতো একই ফলাফল অ্যাপ কীভাবে পেতে পারে

প্রযোজ্য নয়৷ অ্যাপ্লিকেশন লজিকে সমস্যার সমাধান করা উচিত।

কীভাবে অ্যাপ অপ্টিমাইজ করতে হয়

আপনার অ্যাপকে মাউস ও টাচপ্যাড থেকে ইনপুট ইভেন্ট ম্যানেজ করতে হবে, এর মধ্যে টাচপ্যাড জেসচার ও মাউস হুইল স্ক্রলিং অন্তর্ভুক্ত। কীবোর্ড, মাউস ও ট্র্যাকপ্যাড দেখুন।

কীভাবে ওভাররাইড বন্ধ বা অপ্ট-আউট করতে হয়

অ্যাপ্লিকেশনের ম্যানিফেস্টে <uses-feature> এলিমেন্টে FEATURE_PC ঘোষণা করুন।

<uses-feature android:name="android.hardware.type.pc"
              android:required="false" />

মনে রাখবেন: android:required="false" সেট করুন যাতে পিসি (PC) ফিচার ঐচ্ছিক হয় এবং পিসি (PC) নয় এমন ডিভাইসে Google Play অ্যাপ্লিকেশন বাদ না দেয়।

ওভাররাইড অ্যাডজাস্ট করার জন্য প্রপার্টি ফ্ল্যাগ

কোনওটিই নয়।

ওভাররাইড পরীক্ষা করার জন্য adb কমান্ড

ওভাররাইড প্রয়োগ করতে:

adb shell am compat enable OVERRIDE_MOUSE_TO_TOUCH <package>

ওভাররাইড সরিয়ে দিতে:

adb shell am compat disable OVERRIDE_MOUSE_TO_TOUCH <package>

মনে রাখবেন: কমান্ডগুলি শুধুমাত্র সাময়িকভাবে ওভাররাইড প্রয়োগ বা সরিয়ে দেয়।

FORCE_RESIZE_APP

ওভাররাইড প্রয়োগ করা প্যাকেজগুলিকে ছোট-বড় করা যায় এবং সেগুলি মাল্টি-উইন্ডো মোডে খোলা যায়। সব ডিসপ্লে সাইজের ক্ষেত্রে প্রযোজ্য।

ওভাররাইডের মতো একই ফলাফল অ্যাপ কীভাবে পেতে পারে

অ্যাপ ম্যানিফেস্টে, android:resizeableActivity অ্যাট্রিবিউটকে true হিসেবে সেট করুন।

কীভাবে অ্যাপ অপ্টিমাইজ করতে হয়

সব ডিসপ্লে সাইজ ও অ্যাস্পেক্ট রেশিওতে অ্যাপকে মানিয়ে নেওয়ার জন্য রেসপন্সিভ/অ্যাডাপ্টিভ লেআউট ব্যবহার করুন। আলাদা আলাদা ডিসপ্লে সাইজ কাজ করে লিঙ্ক দেখুন।

কীভাবে ওভাররাইড বন্ধ বা অপ্ট-আউট করতে হয়

প্রপার্টি ফ্ল্যাগ PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES-কে false হিসেবে সেট করুন।

ওভাররাইড অ্যাডজাস্ট করার জন্য প্রপার্টি ফ্ল্যাগ

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES"
  android:value="true|false"/>

ওভাররাইড পরীক্ষা করার জন্য adb কমান্ড

ওভাররাইড প্রয়োগ করতে এবং অ্যাপের সাইজ পরিবর্তনযোগ্য করতে:

adb shell am compat enable FORCE_RESIZE_APP <package>

ওভাররাইড সরিয়ে দিতে:

adb shell am compat disable FORCE_RESIZE_APP <package>

মনে রাখবেন: কমান্ডগুলি শুধুমাত্র সাময়িকভাবে ওভাররাইড প্রয়োগ বা সরিয়ে দেয়।

FORCE_NON_RESIZE_APP

ওভাররাইড প্রয়োগ করা প্যাকেজগুলিকে রিসাইজ করা যায় না এবং কনফিগারেশনে পরিবর্তন হলে সাইজ কম্প্যাটিবিলিটি মোডে প্রবেশ করে। সব ডিসপ্লে সাইজের ক্ষেত্রে প্রযোজ্য।

ওভাররাইডের মতো একই ফলাফল অ্যাপ কীভাবে পেতে পারে

অ্যাপ ম্যানিফেস্টে android:resizeableActivity অ্যাট্রিবিউট ও android.supports_size_changes মেটাডেটা ফ্ল্যাগ, দুটিই false হিসেবে সেট করুন এবং কোনও একটি ওরিয়েন্টেশন বা অ্যাস্পেক্ট রেশিও সংক্রান্ত বিধিনিষেধ ঘোষণা করুন।

কীভাবে অ্যাপ অপ্টিমাইজ করতে হয়

রিসাইজ করা হলে ভালভাবে কাজ করে এমন সব অ্যাপের জন্য android:resizeableActivity বা android.supports_size_changes-এর মান true হিসেবে সেট করা থাকতে হবে। সাইজ পরিবর্তন করা হলে অন্যান্য অ্যাপ যাতে সঠিকভাবে কাজ করে সেই জন্য সেগুলিকে আরও উন্নত করা উচিত। android:resizeableActivity দেখুন।

কীভাবে ওভাররাইড বন্ধ বা অপ্ট-আউট করতে হয়

প্রপার্টি ফ্ল্যাগ PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES-কে false হিসেবে সেট করুন।

ওভাররাইড অ্যাডজাস্ট করার জন্য প্রপার্টি ফ্ল্যাগ

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES"
  android:value="true|false"/>

ওভাররাইড পরীক্ষা করার জন্য adb কমান্ড

ওভাররাইড প্রয়োগ করতে এবং অ্যাপের সাইজ পরিবর্তন করা যাবে না এমন করতে:

adb shell am compat enable FORCE_NON_RESIZE_APP <package>

ওভাররাইড সরিয়ে দিতে:

adb shell am compat disable FORCE_NON_RESIZE_APP <package>

মনে রাখবেন: কমান্ডগুলি শুধুমাত্র সাময়িকভাবে ওভাররাইড প্রয়োগ বা সরিয়ে দেয়।

OVERRIDE_MIN_ASPECT_RATIO

প্রদত্ত ন্যূনতম অ্যাস্পেক্ট রেশিও প্রয়োগ করে এমন সব ওভাররাইডের জন্য গেটকিপার।

ওভাররাইডের মতো একই ফলাফল অ্যাপ কীভাবে পেতে পারে

অ্যাক্টিভিটি বা অ্যাপ লেভেলে android:minAspectRatio সেট করুন।

কীভাবে অ্যাপ অপ্টিমাইজ করতে হয়

আপনার অ্যাপে অ্যাস্পেক্ট রেশিও সংক্রান্ত বিধিনিষেধ সেট করবেন না। আপনার অ্যাপ যাতে বিভিন্ন ডিসপ্লে সাইজে কাজ করে তা নিশ্চিত করুন। স্ক্রিনে আপনার অ্যাপের জন্য উপলভ্য স্পেসের পরিমাণের উপর ভিত্তি করে বিভিন্ন লেআউট সাপোর্ট করতে উইন্ডো সাইজ ক্লাস ব্যবহার করুন। Compose WindowSizeClass API এবং View WindowSizeClass API দেখুন।

কীভাবে ওভাররাইড বন্ধ বা অপ্ট-আউট করতে হয়

অ্যাস্পেক্ট রেশিও সংক্রান্ত বিধিনিষেধ নির্দিষ্ট করুন অথবা প্রপার্টি ফ্ল্যাগ PROPERTY_COMPAT_ALLOW_MIN_ASPECT_RATIO_OVERRIDE-কে false হিসেবে সেট করুন।

ওভাররাইড অ্যাডজাস্ট করার জন্য প্রপার্টি ফ্ল্যাগ

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_MIN_ASPECT_RATIO_OVERRIDE"
  android:value="false"/>

ওভাররাইড পরীক্ষা করার জন্য adb কমান্ড

ওভাররাইড প্রয়োগ করতে:

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO <package>

ওভাররাইড সরিয়ে দিতে:

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO <package>

মনে রাখবেন: কমান্ডগুলি শুধুমাত্র সাময়িকভাবে ওভাররাইড প্রয়োগ বা সরিয়ে দেয়।

OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY

শুধুমাত্র পোর্ট্রেট‑ওরিয়েন্টেশনের অ্যাক্টিভিটির জন্য নির্দিষ্ট ন্যূনতম অ্যাস্পেক্ট রেশিও বাধ্যতামূলক করে এমন অ্যাপ সেটিংস সীমাবদ্ধ করে। ডিফল্ট হিসেবে চালু থাকে এবং শুধুমাত্র তখনই কাজ করে যখন OVERRIDE_MIN_ASPECT_RATIO-ও চালু থাকে।

ওভাররাইডের মতো একই ফলাফল অ্যাপ কীভাবে পেতে পারে

OVERRIDE_MIN_ASPECT_RATIO দেখুন।

কীভাবে অ্যাপ অপ্টিমাইজ করতে হয়

OVERRIDE_MIN_ASPECT_RATIO দেখুন।

কীভাবে ওভাররাইড বন্ধ বা অপ্ট-আউট করতে হয়

OVERRIDE_MIN_ASPECT_RATIO দেখুন।

ওভাররাইড অ্যাডজাস্ট করার জন্য প্রপার্টি ফ্ল্যাগ

OVERRIDE_MIN_ASPECT_RATIO দেখুন।

ওভাররাইড পরীক্ষা করার জন্য adb কমান্ড

ওভাররাইড প্রয়োগ করতে:

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY <package>

ওভাররাইড সরিয়ে দিতে:

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY <package>

মনে রাখবেন: কমান্ডগুলি শুধুমাত্র সাময়িকভাবে ওভাররাইড প্রয়োগ বা সরিয়ে দেয়।

OVERRIDE_MIN_ASPECT_RATIO_SMALL

অ্যাক্টিভিটির ন্যূনতম অ্যাস্পেক্ট রেশিও ছোট ভ্যালুতে (৪:৩) সেট করে।

ওভাররাইডের মতো একই ফলাফল অ্যাপ কীভাবে পেতে পারে

OVERRIDE_MIN_ASPECT_RATIO দেখুন।

কীভাবে অ্যাপ অপ্টিমাইজ করতে হয়

OVERRIDE_MIN_ASPECT_RATIO দেখুন।

কীভাবে ওভাররাইড বন্ধ বা অপ্ট-আউট করতে হয়

OVERRIDE_MIN_ASPECT_RATIO দেখুন।

ওভাররাইড অ্যাডজাস্ট করার জন্য প্রপার্টি ফ্ল্যাগ

OVERRIDE_MIN_ASPECT_RATIO দেখুন।

ওভাররাইড পরীক্ষা করার জন্য adb কমান্ড

ওভাররাইড প্রয়োগ করতে:

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_SMALL <package>

ওভাররাইড সরিয়ে দিতে:

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_SMALL <package>

মনে রাখবেন: কমান্ডগুলি শুধুমাত্র সাময়িকভাবে ওভাররাইড প্রয়োগ বা সরিয়ে দেয়।

OVERRIDE_MIN_ASPECT_RATIO_MEDIUM

অ্যাক্টিভিটির ন্যূনতম অ্যাস্পেক্ট রেশিও মাঝারি ভ্যালুতে (৩:২) সেট করে।

ওভাররাইডের মতো একই ফলাফল অ্যাপ কীভাবে পেতে পারে

OVERRIDE_MIN_ASPECT_RATIO দেখুন।

কীভাবে অ্যাপ অপ্টিমাইজ করতে হয়

OVERRIDE_MIN_ASPECT_RATIO দেখুন।

কীভাবে ওভাররাইড বন্ধ বা অপ্ট-আউট করতে হয়

OVERRIDE_MIN_ASPECT_RATIO দেখুন।

ওভাররাইড অ্যাডজাস্ট করার জন্য প্রপার্টি ফ্ল্যাগ

OVERRIDE_MIN_ASPECT_RATIO দেখুন।

ওভাররাইড পরীক্ষা করার জন্য adb কমান্ড

ওভাররাইড প্রয়োগ করতে:

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_MEDIUM <package>

ওভাররাইড সরিয়ে দিতে:

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_MEDIUM <package>

মনে রাখবেন: কমান্ডগুলি শুধুমাত্র সাময়িকভাবে ওভাররাইড প্রয়োগ বা সরিয়ে দেয়।

OVERRIDE_MIN_ASPECT_RATIO_LARGE

অ্যাক্টিভিটির ন্যূনতম অ্যাস্পেক্ট রেশিওকে একটি বড় ভ্যালুতে (১৬:৯) সেট করে।

ওভাররাইডের মতো একই ফলাফল অ্যাপ কীভাবে পেতে পারে

OVERRIDE_MIN_ASPECT_RATIO দেখুন।

কীভাবে অ্যাপ অপ্টিমাইজ করতে হয়

OVERRIDE_MIN_ASPECT_RATIO দেখুন।

কীভাবে ওভাররাইড বন্ধ বা অপ্ট-আউট করতে হয়

OVERRIDE_MIN_ASPECT_RATIO দেখুন।

ওভাররাইড অ্যাডজাস্ট করার জন্য প্রপার্টি ফ্ল্যাগ

OVERRIDE_MIN_ASPECT_RATIO দেখুন।

ওভাররাইড পরীক্ষা করার জন্য adb কমান্ড

ওভাররাইড প্রয়োগ করতে:

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_LARGE <package>

ওভাররাইড সরিয়ে দিতে:

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_LARGE <package>`

মনে রাখবেন: কমান্ডগুলি শুধুমাত্র সাময়িকভাবে ওভাররাইড প্রয়োগ বা সরিয়ে দেয়।

OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN

স্প্লিট-স্ক্রিন অ্যাস্পেক্ট রেশিও ব্যবহার করার সুবিধা চালু করে। লেটারবক্সিং এড়িয়ে, স্প্লিট-স্ক্রিন মোডে উপলভ্য সব জায়গা ব্যবহার করার জন্য কোনও অ্যাপকে অনুমতি দেয়।

ওভাররাইডের মতো একই ফলাফল অ্যাপ কীভাবে পেতে পারে

OVERRIDE_MIN_ASPECT_RATIO দেখুন।

কীভাবে অ্যাপ অপ্টিমাইজ করতে হয়

OVERRIDE_MIN_ASPECT_RATIO দেখুন।

কীভাবে ওভাররাইড বন্ধ বা অপ্ট-আউট করতে হয়

OVERRIDE_MIN_ASPECT_RATIO দেখুন।

ওভাররাইড অ্যাডজাস্ট করার জন্য প্রপার্টি ফ্ল্যাগ

OVERRIDE_MIN_ASPECT_RATIO দেখুন।

ওভাররাইড পরীক্ষা করার জন্য adb কমান্ড

ওভাররাইড প্রয়োগ করতে:

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN <package>

ওভাররাইড সরিয়ে দিতে:

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN <package>

মনে রাখবেন: কমান্ডগুলি শুধুমাত্র সাময়িকভাবে ওভাররাইড প্রয়োগ বা সরিয়ে দেয়।

OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN

উপলভ্য স্ক্রিন স্পেসের সবকটি ব্যবহার করতে, পোর্ট্রেট ফুল-স্ক্রিনে ন্যূনতম অ্যাস্পেক্ট রেশিও ওভাররাইড বন্ধ করে দেয়।

ওভাররাইডের মতো একই ফলাফল অ্যাপ কীভাবে পেতে পারে

OVERRIDE_MIN_ASPECT_RATIO দেখুন।

কীভাবে অ্যাপ অপ্টিমাইজ করতে হয়

OVERRIDE_MIN_ASPECT_RATIO দেখুন।

কীভাবে ওভাররাইড বন্ধ বা অপ্ট-আউট করতে হয়

OVERRIDE_MIN_ASPECT_RATIO দেখুন।

ওভাররাইড অ্যাডজাস্ট করার জন্য প্রপার্টি ফ্ল্যাগ

OVERRIDE_MIN_ASPECT_RATIO দেখুন।

ওভাররাইড পরীক্ষা করার জন্য adb কমান্ড

ওভাররাইড প্রয়োগ করতে:

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN <package>

ওভাররাইড সরিয়ে দিতে:

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN <package>

মনে রাখবেন: কমান্ডগুলি শুধুমাত্র সাময়িকভাবে ওভাররাইড প্রয়োগ বা সরিয়ে দেয়।

OVERRIDE_ANY_ORIENTATION

যেকোনও ধরনের ওরিয়েন্টেশন ওভাররাইড করতে নিম্নলিখিত ওভাররাইড চালু করে:

ওভাররাইডের মতো একই ফলাফল অ্যাপ কীভাবে পেতে পারে

activity:screenOrientation ম্যানিফেস্ট অ্যাট্রিবিউট সেট করুন, অথবা Activity#setRequestedOrientation() API ব্যবহার করুন।

কীভাবে অ্যাপ অপ্টিমাইজ করতে হয়

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

কীভাবে ওভাররাইড বন্ধ বা অপ্ট-আউট করতে হয়

প্রপার্টি ফ্ল্যাগ PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE false হিসেবে সেট করুন।

ওভাররাইড অ্যাডজাস্ট করার জন্য প্রপার্টি ফ্ল্যাগ

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE"
  android:value="true|false"/>

ওভাররাইড পরীক্ষা করার জন্য adb কমান্ড

ওভাররাইড প্রয়োগ করতে:

adb shell am compat enable OVERRIDE_ANY_ORIENTATION <package>

ওভাররাইড সরিয়ে দিতে:

adb shell am compat disable OVERRIDE_ANY_ORIENTATION <package>

মনে রাখবেন: কমান্ডগুলি শুধুমাত্র সাময়িকভাবে ওভাররাইড প্রয়োগ বা সরিয়ে দেয়।

OVERRIDE_ANY_ORIENTATION_TO_USER

উপলভ্য ডিসপ্লে স্পেস পূরণ করার জন্য অ্যাপকে অনুমতি দেয়। অ্যাপ ম্যানিফেস্টে উল্লেখ করা যেকোনও ওরিয়েন্টেশন, সাইজ পরিবর্তনযোগ্যতা এবং অ্যাস্পেক্ট রেশিও সংক্রান্ত বিধিনিষেধকে ওভাররাইড করে। এছাড়াও, এটি Activity#setRequestedOrientation() বা Activity#getRequestedOrientation() নম্বরে আসা যেকোনও কল উপেক্ষা করে।

ওভাররাইডের মতো একই ফলাফল অ্যাপ কীভাবে পেতে পারে

  • android:screenOrientation ম্যানিফেস্ট অ্যাট্রিবিউট সেট করবেন না অথবা অ্যাট্রিবিউটকে "user" হিসেবে সেট করুন।

  • android:resizeableActivity ম্যানিফেস্ট অ্যাট্রিবিউটকে true হিসেবে সেট করুন।

  • ছোট স্ক্রিনে, মাল্টি-উইন্ডো মোড বন্ধ করার সময় android:resizeableActivity=false অ্যাপের সাইজ পরিবর্তন করার সুবিধা দিতে, android.supports_size_changes মেটাডেটা ফ্ল্যাগকে true হিসেবে সেট করুন। minAspectRatio ও maxAspectRatio সেট করবেন না।

কীভাবে অ্যাপ অপ্টিমাইজ করতে হয়

সব ধরনের অরিয়েন্টেশন কাজ করে এমনভাবে আপনার অ্যাপ চালু করুন; আপনার অ্যাপের মেনিফেস্টে কোনও screenOrientation স্পেসিফিকেশন সেট করবেন না। আপনার অ্যাপের ম্যানিফেস্টে android:resizeableActivity অ্যাট্রিবিউটকে true হিসেবে সেট করে অ্যাপের সাইজ পরিবর্তন করার সুবিধা, মাল্টি‑উইন্ডো মোড এবং সব ডিসপ্লে অ্যাস্পেক্ট রেশিও কাজ করে তা নিশ্চিত করুন। আলাদা আলাদা ডিসপ্লে সাইজ কাজ করে লিঙ্ক দেখুন।

কীভাবে ওভাররাইড বন্ধ বা অপ্ট-আউট করতে হয়

OVERRIDE_ANY_ORIENTATION দেখুন।

ওভাররাইড অ্যাডজাস্ট করার জন্য প্রপার্টি ফ্ল্যাগ

OVERRIDE_ANY_ORIENTATION দেখুন।

ওভাররাইড পরীক্ষা করার জন্য adb কমান্ড

ওভাররাইড প্রয়োগ করতে:

adb shell am compat enable OVERRIDE_ANY_ORIENTATION_TO_USER <package>

ওভাররাইড সরিয়ে দিতে:

adb shell am compat disable OVERRIDE_ANY_ORIENTATION_TO_USER <package>

মনে রাখবেন: কমান্ডগুলি শুধুমাত্র সাময়িকভাবে ওভাররাইড প্রয়োগ বা সরিয়ে দেয়।

OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT

প্যাকেজের মধ্যে থাকা সব অ্যাক্টিভিটির জন্য পোর্ট্রেট ওরিয়েন্টেশন চালু করে। OVERRIDE_ANY_ORIENTATION চালু না থাকলে, অ্যাক্টিভিটি অন্য কোনও নির্দিষ্ট ওরিয়েন্টেশন নির্দিষ্ট না করলে তবেই ওভাররাইড ব্যবহার করা হয়।

ওভাররাইডের মতো একই ফলাফল অ্যাপ কীভাবে পেতে পারে

OVERRIDE_ANY_ORIENTATION দেখুন।

কীভাবে অ্যাপ অপ্টিমাইজ করতে হয়

OVERRIDE_ANY_ORIENTATION দেখুন।

কীভাবে ওভাররাইড বন্ধ বা অপ্ট-আউট করতে হয়

OVERRIDE_ANY_ORIENTATION দেখুন।

ওভাররাইড অ্যাডজাস্ট করার জন্য প্রপার্টি ফ্ল্যাগ

OVERRIDE_ANY_ORIENTATION দেখুন।

ওভাররাইড পরীক্ষা করার জন্য adb কমান্ড

ওভাররাইড প্রয়োগ করতে:

adb shell am compat enable OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT <package>

ওভাররাইড সরিয়ে দিতে:

adb shell am compat disable OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT <package>

মনে রাখবেন: কমান্ডগুলি শুধুমাত্র সাময়িকভাবে ওভাররাইড প্রয়োগ বা সরিয়ে দেয়।

OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR

প্যাকেজের সব অ্যাক্টিভিটির জন্য nosensor ওরিয়েন্টেশন চালু করে। OVERRIDE_ANY_ORIENTATION চালু না থাকলে, ওভাররাইড শুধুমাত্র তখনই ব্যবহার করা হয় যখন অ্যাক্টিভিটি অন্য কোনও নির্দিষ্ট অরিয়েন্টেশন নির্দিষ্ট করে না।

ওভাররাইডের মতো একই ফলাফল অ্যাপ কীভাবে পেতে পারে

OVERRIDE_ANY_ORIENTATION দেখুন।

কীভাবে অ্যাপ অপ্টিমাইজ করতে হয়

OVERRIDE_ANY_ORIENTATION দেখুন।

কীভাবে ওভাররাইড বন্ধ বা অপ্ট-আউট করতে হয়

OVERRIDE_ANY_ORIENTATION দেখুন।

ওভাররাইড অ্যাডজাস্ট করার জন্য প্রপার্টি ফ্ল্যাগ

OVERRIDE_ANY_ORIENTATION দেখুন।

ওভাররাইড পরীক্ষা করার জন্য adb কমান্ড

ওভাররাইড প্রয়োগ করতে:

adb shell am compat enable OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR <package>

ওভাররাইড সরিয়ে দিতে:

adb shell am compat disable OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR <package>

মনে রাখবেন: কমান্ডগুলি শুধুমাত্র সাময়িকভাবে ওভাররাইড প্রয়োগ বা সরিয়ে দেয়।

OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE

প্যাকেজের মধ্যে থাকা সব অ্যাক্টিভিটির জন্য reverseLandscape ওরিয়েন্টেশন চালু করে। OVERRIDE_ANY_ORIENTATION চালু না থাকলে, ওভাররাইড শুধুমাত্র তখনই ব্যবহার করা হয় যখন অ্যাক্টিভিটি অন্য কোনও নির্দিষ্ট অরিয়েন্টেশন নির্দিষ্ট করে না।

ওভাররাইডের মতো একই ফলাফল অ্যাপ কীভাবে পেতে পারে

OVERRIDE_ANY_ORIENTATION দেখুন।

কীভাবে অ্যাপ অপ্টিমাইজ করতে হয়

OVERRIDE_ANY_ORIENTATION দেখুন।

কীভাবে ওভাররাইড বন্ধ বা অপ্ট-আউট করতে হয়

OVERRIDE_ANY_ORIENTATION দেখুন।

ওভাররাইড অ্যাডজাস্ট করার জন্য প্রপার্টি ফ্ল্যাগ

OVERRIDE_ANY_ORIENTATION দেখুন।

ওভাররাইড পরীক্ষা করার জন্য adb কমান্ড

ওভাররাইড প্রয়োগ করতে:

adb shell am compat enable OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE <package>

ওভাররাইড সরিয়ে দিতে:

adb shell am compat disable OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE <package>

মনে রাখবেন: কমান্ডগুলি শুধুমাত্র সাময়িকভাবে ওভাররাইড প্রয়োগ বা সরিয়ে দেয়।

OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA

সীমা OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT, OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR, এবং OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE ওভাররাইড শুধুমাত্র তখনই কার্যকর হবে যখন ক্যামেরা কানেকশন অ্যাক্টিভ থাকবে।

ওভাররাইডের মতো একই ফলাফল অ্যাপ কীভাবে পেতে পারে

OVERRIDE_ANY_ORIENTATION দেখুন।

কীভাবে অ্যাপ অপ্টিমাইজ করতে হয়

OVERRIDE_ANY_ORIENTATION দেখুন।

কীভাবে ওভাররাইড বন্ধ বা অপ্ট-আউট করতে হয়

OVERRIDE_ANY_ORIENTATION দেখুন।

ওভাররাইড অ্যাডজাস্ট করার জন্য প্রপার্টি ফ্ল্যাগ

OVERRIDE_ANY_ORIENTATION দেখুন।

ওভাররাইড পরীক্ষা করার জন্য adb কমান্ড

ওভাররাইড প্রয়োগ করতে:

adb shell am compat enable OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA <package>

ওভাররাইড সরিয়ে দিতে:

adb shell am compat disable OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA <package>

মনে রাখবেন: কমান্ডগুলি শুধুমাত্র সাময়িকভাবে ওভাররাইড প্রয়োগ বা সরিয়ে দেয়।

OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION

নিম্নলিখিত শর্তগুলি পূরণ হলে ডিসপ্লে ওরিয়েন্টেশনকে ল্যান্ডস্কেপ ন্যাচারাল ওরিয়েন্টেশনে সীমাবদ্ধ করে:

  • অ্যাক্টিভিটি ফুল-স্ক্রিন মোডে আছে
  • 'কম্পোনেন্ট প্রপার্টি অপ্ট-আউট করুন' PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE চালু করা নেই
  • ডিসপ্লের জন্য ডিভাইস প্রস্তুতকারকের উপেক্ষা করা ওরিয়েন্টেশন সংক্রান্ত অনুরোধ সেটিং চালু করা আছে
  • ডিসপ্লের স্বাভাবিক ওরিয়েন্টেশন হল ল্যান্ডস্কেপ

ওভাররাইডের মতো একই ফলাফল অ্যাপ কীভাবে পেতে পারে

প্রযোজ্য নয়৷ অ্যাপ্লিকেশন লজিকে সমস্যার সমাধান করা উচিত।

কীভাবে অ্যাপ অপ্টিমাইজ করতে হয়

OVERRIDE_ANY_ORIENTATION দেখুন।

কীভাবে ওভাররাইড বন্ধ বা অপ্ট-আউট করতে হয়

প্রপার্টি ফ্ল্যাগ PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE false হিসেবে সেট করুন।

ওভাররাইড অ্যাডজাস্ট করার জন্য প্রপার্টি ফ্ল্যাগ

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE"
  android:value="true|false"/>

ওভাররাইড পরীক্ষা করার জন্য adb কমান্ড

ওভাররাইড প্রয়োগ করতে:

adb shell am compat enable OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION <package>

ওভাররাইড সরিয়ে দিতে:

adb shell am compat disable OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION <package>

মনে রাখবেন: কমান্ডগুলি শুধুমাত্র সাময়িকভাবে ওভাররাইড প্রয়োগ বা সরিয়ে দেয়।

OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION

অ্যাপ রিলঞ্চ করলে বা অ্যাক্টিভ ক্যামেরা কম্প্যাটিবিলিটি ট্রিটমেন্ট থাকলে, অ্যাপ কলিং Activity#setRequestedOrientation()-এর উত্তরে অ্যাপের ওরিয়েন্টেশন আপডেট করা এড়িয়ে যাওয়ার জন্য কম্প্যাটিবিলিটি সংক্রান্ত নীতি চালু করে।

ওভাররাইডের মতো একই ফলাফল অ্যাপ কীভাবে পেতে পারে

true-এ প্রপার্টি ফ্ল্যাগ PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION সেট করুন।

কীভাবে অ্যাপ অপ্টিমাইজ করতে হয়

OVERRIDE_ANY_ORIENTATION দেখুন।

কীভাবে ওভাররাইড বন্ধ বা অপ্ট-আউট করতে হয়

false-এ প্রপার্টি ফ্ল্যাগ PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION সেট করুন।

ওভাররাইড অ্যাডজাস্ট করার জন্য প্রপার্টি ফ্ল্যাগ

<property android:name="android.window.PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION"
  android:value="true|false"/>

ওভাররাইড পরীক্ষা করার জন্য adb কমান্ড

ওভাররাইড প্রয়োগ করতে:

adb shell am compat enable OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION <package>

ওভাররাইড সরিয়ে দিতে:

adb shell am compat disable OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION <package>

মনে রাখবেন: কমান্ডগুলি শুধুমাত্র সাময়িকভাবে ওভাররাইড প্রয়োগ বা সরিয়ে দেয়।

OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED

স্থির ওরিয়েন্টেশনের জন্য কোনও অ্যাক্টিভিটি লেটারবক্স করা না হলে, কোনও অ্যাপ এক সেকেন্ডে Activity#setRequestedOrientation() দু'বারের বেশি কল করলে, অ্যাপের অনুরোধ করা ওরিয়েন্টেশন উপেক্ষা করে কম্প্যাটিবিলিটি নীতি চালু করে।

ওভাররাইডের মতো একই ফলাফল অ্যাপ কীভাবে পেতে পারে

প্রযোজ্য নয়৷ অ্যাপ্লিকেশন লজিকে সমস্যার সমাধান করা উচিত।

কীভাবে অ্যাপ অপ্টিমাইজ করতে হয়

OVERRIDE_ANY_ORIENTATION দেখুন।

কীভাবে ওভাররাইড বন্ধ বা অপ্ট-আউট করতে হয়

প্রপার্টি ফ্ল্যাগ PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED থেকে false-এ সেট করুন।

ওভাররাইড অ্যাডজাস্ট করার জন্য প্রপার্টি ফ্ল্যাগ

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED"
  android:value="false"/>

ওভাররাইড পরীক্ষা করার জন্য adb কমান্ড

ওভাররাইড প্রয়োগ করতে:

adb shell am compat enable OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED <package>

ওভাররাইড সরিয়ে দিতে:

adb shell am compat disable OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED <package>

মনে রাখবেন: কমান্ডগুলি শুধুমাত্র সাময়িকভাবে ওভাররাইড প্রয়োগ বা সরিয়ে দেয়।

OVERRIDE_RESPECT_REQUESTED_ORIENTATION

ডিসপ্লে এরিয়া বা সম্পূর্ণ ডিসপ্লের জন্য ডিভাইস প্রস্তুতকারক চালু করতে পারেন এমন অরিয়েন্টেশন উপেক্ষা করার অনুরোধ সংক্রান্ত আচরণ থেকে প্যাকেজ বাদ দেয়।

ওভাররাইডের মতো একই ফলাফল অ্যাপ কীভাবে পেতে পারে

প্রযোজ্য নয়৷ অ্যাপ্লিকেশন লজিকে সমস্যার সমাধান করা উচিত।

কীভাবে অ্যাপ অপ্টিমাইজ করতে হয়

OVERRIDE_ANY_ORIENTATION দেখুন।

কীভাবে ওভাররাইড বন্ধ বা অপ্ট-আউট করতে হয়

বেরিয়ে আসার কোনও বিকল্প নেই। ডিভাইস প্রস্তুতকারকের উপেক্ষা করা ওরিয়েন্টেশন অনুরোধ সেটিং চালু করা আছে এমন ডিভাইসের সাথে অ্যাপটি মানানসই না হলে ওভাররাইড বন্ধ করা বিপজ্জনক হতে পারে। ওভাররাইড বন্ধ করতে Android Developer Relations টিমের সাথে যোগাযোগ করুন।

ওভাররাইড অ্যাডজাস্ট করার জন্য প্রপার্টি ফ্ল্যাগ

এই ওভাররাইডের জন্য কোনও প্রপার্টি ফ্ল্যাগ নেই।

ওভাররাইড পরীক্ষা করার জন্য adb কমান্ড

ওভাররাইড প্রয়োগ করতে:

adb shell am compat enable OVERRIDE_RESPECT_REQUESTED_ORIENTATION <package>

ওভাররাইড সরিয়ে দিতে:

adb shell am compat disable OVERRIDE_RESPECT_REQUESTED_ORIENTATION <package>

মনে রাখবেন: কমান্ডগুলি শুধুমাত্র সাময়িকভাবে ওভাররাইড প্রয়োগ বা সরিয়ে দেয়।

NEVER_SANDBOX_DISPLAY_APIS

লেটারবক্সড বা সাইজ কম্প্যাটিবিলিটি মোড অ্যাক্টিভিটির জন্য Display API স্যান্ডবক্সিং প্রয়োগ না করার জন্য প্যাকেজকে বাধ্য করে। Display API ডিসপ্লে এরিয়ার বাউন্ডারি প্রদান করা চালিয়ে যাবে।

ওভাররাইডের মতো একই ফলাফল অ্যাপ কীভাবে পেতে পারে

android:resizeableActivity ম্যানিফেস্ট অ্যাট্রিবিউটকে true অথবা android.supports_size_changes মেটাডেটা ফ্ল্যাগকে true হিসেবে সেট করে অ্যাক্টিভিটি রিসাইজ করা যাবে বলে ঘোষণা করুন।

কীভাবে অ্যাপ অপ্টিমাইজ করতে হয়

যেসব অ্যাপ নিজেদের সম্পূর্ণ রিসাইজ করা যায় বলে ঘোষণা করে, সেগুলিকে UI এলিমেন্ট পজিশন করার জন্য কখনই ডিসপ্লে সাইজের উপর নির্ভর করা উচিত নয়। আপনার অ্যাপকে আপ-টু-ডেট API-তে মাইগ্রেট করুন যা WindowMetricsপ্রদান করে। আপনি Jetpack Compose ব্যবহার করলে, অ্যাপের বর্তমান ডিসপ্লেতে স্ক্রিনের কতটা জায়গা আছে তার উপর ভিত্তি করে UI ড্র করার জন্য WindowSizeClass API-এর সুবিধা নিন। উইন্ডো সাইজ ক্লাস ব্যবহার করা দেখুন।

কীভাবে ওভাররাইড বন্ধ বা অপ্ট-আউট করতে হয়

বেরিয়ে আসার কোনও বিকল্প নেই। অননুমোদিত API থেকে মাইগ্রেট করুন।

ওভাররাইড অ্যাডজাস্ট করার জন্য প্রপার্টি ফ্ল্যাগ

এই ওভাররাইডের জন্য কোনও প্রপার্টি ফ্ল্যাগ নেই।

ওভাররাইড পরীক্ষা করার জন্য adb কমান্ড

ওভাররাইড প্রয়োগ করতে:

adb shell am compat enable NEVER_SANDBOX_DISPLAY_APIS <package>

ওভাররাইড সরিয়ে দিতে:

adb shell am compat disable NEVER_SANDBOX_DISPLAY_APIS <package>

মনে রাখবেন: কমান্ডগুলি শুধুমাত্র সাময়িকভাবে ওভাররাইড প্রয়োগ বা সরিয়ে দেয়।

ALWAYS_SANDBOX_DISPLAY_APIS

উইন্ডোইং মোড যাই হোক না কেন, প্যাকেজে সবসময় Display API স্যান্ডবক্সিং প্রয়োগ করতে বাধ্য করে । Display API সবসময় অ্যাপের বাউন্ড প্রদান করে।

ওভাররাইডের মতো একই ফলাফল অ্যাপ কীভাবে পেতে পারে

android:resizeableActivity অ্যাট্রিবিউটকে false অথবা android.supports_size_changes মেটাডেটা ফ্ল্যাগকে false হিসেবে সেট করে অ্যাক্টিভিটি রিসাইজ করা যাবে না বলে ঘোষণা করুন।

কীভাবে অ্যাপ অপ্টিমাইজ করতে হয়

যেসব অ্যাপ নিজেদের সম্পূর্ণ রিসাইজ করা যায় বলে ঘোষণা করে, সেগুলিকে UI এলিমেন্ট পজিশন করার জন্য ডিসপ্লে সাইজের উপর কখনও নির্ভর করা উচিত নয়। অননুমোদিত API থেকে আপনার অ্যাপকে আপ‑টু‑ডেট API-তে মাইগ্রেট করুন যা WindowMetrics প্রদান করে। WindowMetricsCalculator দেখুন।

কীভাবে ওভাররাইড বন্ধ বা অপ্ট-আউট করতে হয়

বেরিয়ে আসার কোনও বিকল্প নেই। অননুমোদিত API থেকে মাইগ্রেট করুন।

ওভাররাইড অ্যাডজাস্ট করার জন্য প্রপার্টি ফ্ল্যাগ

এই ওভাররাইডের জন্য কোনও প্রপার্টি ফ্ল্যাগ নেই।

ওভাররাইড পরীক্ষা করার জন্য adb কমান্ড

ওভাররাইড প্রয়োগ করতে:

adb shell am compat enable ALWAYS_SANDBOX_DISPLAY_APIS <package>

ওভাররাইড সরিয়ে দিতে:

adb shell am compat disable ALWAYS_SANDBOX_DISPLAY_APIS <package>

মনে রাখবেন: কমান্ডগুলি শুধুমাত্র সাময়িকভাবে ওভাররাইড প্রয়োগ বা সরিয়ে দেয়।

OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS

অ্যাক্টিভিটি বাউন্ডে নিম্নলিখিত View API-কে স্যান্ডবক্স করার জন্য প্যাকেজকে বাধ্য করে:

ওভাররাইডের মতো একই ফলাফল অ্যাপ কীভাবে পেতে পারে

অ্যাপ উইন্ডোর বাউন্ড ও অফসেট ডিভাইসের ডিসপ্লের বাউন্ড ও অফসেটের পরিবর্তে অ্যাপ উইন্ডোর সাপেক্ষে অফসেট প্রদান করে এমন API ব্যবহার করে অ্যাপ্লিকেশন কোডে সমস্যার সমাধান করুন।

কীভাবে অ্যাপ অপ্টিমাইজ করতে হয়

অ্যাপে লেটারবক্সিং ও মাল্টি-উইন্ডো মোড প্রয়োগ করার সম্ভাবনা বিবেচনা করে অ্যাপকে View API ব্যবহার করতে হবে। WindowMetricsCalculator দেখুন।

কীভাবে ওভাররাইড বন্ধ বা অপ্ট-আউট করতে হয়

false-এ প্রপার্টি ফ্ল্যাগ PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS সেট করুন।

ওভাররাইড অ্যাডজাস্ট করার জন্য প্রপার্টি ফ্ল্যাগ

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS"
  android:value="false"/>

ওভাররাইড পরীক্ষা করার জন্য adb কমান্ড

ওভাররাইড প্রয়োগ করতে:

adb shell am compat enable OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS <package>

ওভাররাইড সরিয়ে দিতে:

adb shell am compat disable OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS <package>

মনে রাখবেন: কমান্ডগুলি শুধুমাত্র সাময়িকভাবে ওভাররাইড প্রয়োগ বা সরিয়ে দেয়।

OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION

ফোর্স রোটেশন বন্ধ করে দেয়। কিছু অ্যাপে ব্যবহারকারীর অভিজ্ঞতা উন্নত করে।

ওভাররাইডের মতো একই ফলাফল অ্যাপ কীভাবে পেতে পারে

false-এ প্রপার্টি ফ্ল্যাগ PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION সেট করুন।

কীভাবে অ্যাপ অপ্টিমাইজ করতে হয়

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

কীভাবে ওভাররাইড বন্ধ বা অপ্ট-আউট করতে হয়

true-এ প্রপার্টি ফ্ল্যাগ PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION সেট করুন।

ওভাররাইড অ্যাডজাস্ট করার জন্য প্রপার্টি ফ্ল্যাগ

<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION"
  android:value="true|false"/>

ওভাররাইড পরীক্ষা করার জন্য adb কমান্ড

ওভাররাইড প্রয়োগ করতে, যা জোর করে রোটেট করার সুবিধা সরিয়ে দেয়:

adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>

ওভাররাইড সরিয়ে দিতে, যা জোর করে রোটেট করার অনুমতি দেয়:

adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>

মনে রাখবেন: কমান্ডগুলি শুধুমাত্র সাময়িকভাবে ওভাররাইড প্রয়োগ বা সরিয়ে দেয়।

OVERRIDE_CAMERA_COMPAT_DISABLE_SIMULATE_REQUESTED_ORIENTATION

ক্যামেরার জন্য অনুরোধ করা ওরিয়েন্টেশন ট্রিটমেন্ট সিমুলেট করা বন্ধ করে দেয়। কিছু অ্যাপে ব্যবহারকারীর অভিজ্ঞতা উন্নত করে।

ওভাররাইডের মতো একই ফলাফল অ্যাপ কীভাবে পেতে পারে

false-এ প্রপার্টি ফ্ল্যাগ PROPERTY_CAMERA_COMPAT_ALLOW_SIMULATE_REQUESTED_ORIENTATION সেট করুন।

কীভাবে অ্যাপ অপ্টিমাইজ করতে হয়

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

কীভাবে ওভাররাইড বন্ধ বা অপ্ট-আউট করতে হয়

এই প্রপার্টি কম্প্যাটিবিলিটি ট্রিটমেন্ট বন্ধ করে দেওয়ায়, আপনি ডাইনামিক ডিসপ্লে রোটেশন পরিবর্তন, ডিভাইসের সেন্সর ওরিয়েন্টেশন এবং উইন্ডো ও প্রিভিউ সাইজ বিবেচনা করে ব্যবহারকারীর অভিজ্ঞতা উন্নত করতে পারবেন।

ওভাররাইড অ্যাডজাস্ট করার জন্য প্রপার্টি ফ্ল্যাগ

<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_SIMULATE_REQUESTED_ORIENTATION"
  android:value="true|false"/>

ওভাররাইড পরীক্ষা করার জন্য adb কমান্ড

অনুরোধ করা ওরিয়েন্টেশন সিমুলেট করা সরিয়ে দিতে ওভাররাইড প্রয়োগ করতে:

adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_SIMULATE_REQUESTED_ORIENTATION <package>

ওভাররাইড সরাতে, যা অনুরোধ করা ওরিয়েন্টেশন সিমুলেট করার অনুমতি দেয়:

adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_SIMULATE_REQUESTED_ORIENTATION <package>

মনে রাখবেন: কমান্ডগুলি শুধুমাত্র সাময়িকভাবে ওভাররাইড প্রয়োগ বা সরিয়ে দেয়।

OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH

ফোর্স রোটেট করার পরে অ্যাক্টিভিটি রিফ্রেশ করার সুবিধা বন্ধ করে দেয়। অ্যাপে রিফ্রেশ করার ফলে স্টেট হারিয়ে গেলে ব্যবহারকারীর অভিজ্ঞতা উন্নত করে।

ওভাররাইডের মতো একই ফলাফল অ্যাপ কীভাবে পেতে পারে

false-এ প্রপার্টি ফ্ল্যাগ PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH সেট করুন।

কীভাবে অ্যাপ অপ্টিমাইজ করতে হয়

OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION দেখুন।

কীভাবে ওভাররাইড বন্ধ বা অপ্ট-আউট করতে হয়

true-এ প্রপার্টি ফ্ল্যাগ PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH সেট করুন।

ওভাররাইড অ্যাডজাস্ট করার জন্য প্রপার্টি ফ্ল্যাগ

<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH"
  android:value="true|false"/>

ওভাররাইড পরীক্ষা করার জন্য adb কমান্ড

অ্যাক্টিভিটি রিফ্রেশ করার সুবিধা সরিয়ে দেয় এমন ওভাররাইড প্রয়োগ করতে:

adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>

অ্যাক্টিভিটি রিফ্রেশ করার অনুমতি দেয় এমন ওভাররাইড সরাতে:

adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>

মনে রাখবেন: কমান্ডগুলি শুধুমাত্র সাময়িকভাবে ওভাররাইড প্রয়োগ বা সরিয়ে দেয়।

OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE

ক্যামেরার মানানসই হওয়ার কারণে জোর করে রোটেট করার পরে, এটি প্রয়োগ করা প্যাকেজগুলিকে onResume() → onPause() → onResume() সাইকেল ব্যবহার করে অ্যাক্টিভিটি রিফ্রেশ করতে বাধ্য করে, onResume() → onStop() → onResume() নয়।

ওভাররাইডের মতো একই ফলাফল অ্যাপ কীভাবে পেতে পারে

true-এ প্রপার্টি ফ্ল্যাগ PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE সেট করুন।

কীভাবে অ্যাপ অপ্টিমাইজ করতে হয়

OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION দেখুন।

কীভাবে ওভাররাইড বন্ধ বা অপ্ট-আউট করতে হয়

false-এ প্রপার্টি ফ্ল্যাগ PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE সেট করুন।

ওভাররাইড অ্যাডজাস্ট করার জন্য প্রপার্টি ফ্ল্যাগ

<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE"
  android:value="true|false"/>

ওভাররাইড পরীক্ষা করার জন্য adb কমান্ড

ওভাররাইড প্রয়োগ করতে:

adb shell am compat enable OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE <package>

ওভাররাইড সরিয়ে দিতে:

adb shell am compat disable OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE <package>

মনে রাখবেন: কমান্ডগুলি শুধুমাত্র সাময়িকভাবে ওভাররাইড প্রয়োগ বা সরিয়ে দেয়।

OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT

ক্যামেরা আউটপুটকে জোর করে ক্রপ করে বিপরীত দিকে ঘুরিয়ে দেয়, যখন পোর্ট্রেট ক্যামেরা ওরিয়েন্টেশন ডিভাইসের স্বাভাবিক ওরিয়েন্টেশনের সাথে অ্যালাইন করে না। অনেক অ্যাপ এই পরিস্থিতি সামলাতে পারে না এবং অন্যভাবে প্রসারিত ছবি দেখায়।

ওভাররাইডের মতো একই ফলাফল অ্যাপ কীভাবে পেতে পারে

true-এ প্রপার্টি ফ্ল্যাগ PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT সেট করুন।

কীভাবে অ্যাপ অপ্টিমাইজ করতে হয়

OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION দেখুন।

কীভাবে ওভাররাইড বন্ধ বা অপ্ট-আউট করতে হয়

false-এ প্রপার্টি ফ্ল্যাগ PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT সেট করুন।

ওভাররাইড অ্যাডজাস্ট করার জন্য প্রপার্টি ফ্ল্যাগ

<property android:name="android.camera.PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT"
  android:value="true|false"/>

ওভাররাইড পরীক্ষা করার জন্য adb কমান্ড

ওভাররাইড প্রয়োগ করতে, যা ইনার ফ্রন্ট ক্যামেরা ক্রপিং প্রয়োগ করে:

adb shell am compat enable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>

ওভাররাইড সরাতে, যা ইনার ফ্রন্ট ক্যামেরা ক্রপিং সরিয়ে দেয়:

adb shell am compat disable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>

মনে রাখবেন: কমান্ডগুলি শুধুমাত্র সাময়িকভাবে ওভাররাইড প্রয়োগ বা সরিয়ে দেয়।

OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION

অ্যাপকে অ্যাপ স্ক্রিন শেয়ারিং থেকে অপ্ট-আউট করতে বাধা দেয় (দেখুন মিডিয়া প্রজেকশন)। অ্যাপগুলি createConfigForDefaultDisplay() API-এর অপব্যবহার করে ফুল‑স্ক্রিন ক্যাপচার করতে বাধ্য করলে এবং বিজ্ঞপ্তির কন্টেন্ট প্রকাশ করে ব্যবহারকারীর গোপনীয়তা বিপন্ন করলে এটি প্রয়োগ করা হয়। ফুল‑স্ক্রিন ক্যাপচার করা হলেও অ্যাপ স্ক্রিন শেয়ার করা হয় না এবং উইন্ডো মোড নির্বিশেষে সব অ্যাপের ক্ষেত্রে এটি প্রযোজ্য।

ওভাররাইডের মতো একই ফলাফল অ্যাপ কীভাবে পেতে পারে

ডিফল্ট মিডিয়া প্রজেকশন আচরণকে অনুমতি দিন (Android 14, API লেভেল 34-এ প্রয়োগ করা হয়েছে, createScreenCaptureIntent() সহ), যা উইন্ডোয়িং মোড নির্বিশেষে ব্যবহারকারীদের সম্পূর্ণ স্ক্রিন বা একটি অ্যাপ উইন্ডো শেয়ার করার সিদ্ধান্ত নিতে সাহায্য করে। অথবা createConfigForUserChoice()-এ কল করে পাওয়া MediaProjectionConfig আর্গুমেন্ট সহ createScreenCaptureIntent(MediaProjectionConfig)-এ কল করুন।

কীভাবে অ্যাপ অপ্টিমাইজ করতে হয়

মিডিয়া প্রজেকশনের সময় ব্যবহারকারীকে সম্পূর্ণ ডিভাইস ডিসপ্লে বা অ্যাপ উইন্ডো শেয়ার করার বিকল্প বেছে নেওয়ার অনুমতি দিন, Android 14 ভার্সন অনুযায়ী এটি ডিফল্ট আচরণ।

মাল্টি‑উইন্ডো মোডে কাজ করার জন্য আপনার অ্যাপের সাইজ পরিবর্তনযোগ্য (resizeableActivity="true") করে তুলুন।

কীভাবে ওভাররাইড বন্ধ বা অপ্ট-আউট করতে হয়

ব্যবহারকারীর গোপনীয়তা অত্যন্ত গুরুত্বপূর্ণ হওয়ায়, আপনার অ্যাপ এই ওভাররাইড বন্ধ করতে বা অপ্ট-আউট করতে পারবে না।

ওভাররাইড অ্যাডজাস্ট করার জন্য প্রপার্টি ফ্ল্যাগ

কোনওটিই নয়।

ওভাররাইড পরীক্ষা করার জন্য adb কমান্ড

ওভাররাইড প্রয়োগ করতে, যা অ্যাপের আংশিক স্ক্রিন শেয়ারিং থেকে অপ্ট-আউট করার বিকল্প বাতিল করে (অর্থাৎ, আংশিক স্ক্রিন শেয়ারিং চালু করে):

adb shell am compat enable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>

ওভাররাইড সরাতে, যা অ্যাপকে আংশিক স্ক্রিন শেয়ারিং থেকে অপ্ট-আউট করতে দেয়:

adb shell am compat disable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>

মনে রাখবেন: কমান্ডগুলি শুধুমাত্র সাময়িকভাবে ওভাররাইড প্রয়োগ বা সরিয়ে দেয়।

OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS

স্প্লিট‑স্ক্রিন মোডে ফোকাস করা নেই এমন অ্যাপের জন্য নকল ফোকাস পাঠানোর সুবিধা চালু করে। কিছু গেম ইঞ্জিন অ্যাপের কন্টেন্ট ড্র করার আগে ফোকাস পাওয়ার জন্য অপেক্ষা করে; এবং তাই, ফেক ফোকাস অ্যাপকে আবার চালু করার পরে কালো হয়ে যাওয়া এড়াতে সাহায্য করে এবং এখনও ফোকাস পায় না।

ওভাররাইডের মতো একই ফলাফল অ্যাপ কীভাবে পেতে পারে

প্রপার্টি ফ্ল্যাগ PROPERTY_COMPAT_ENABLE_FAKE_FOCUS-কে true-এ সেট করুন।

কীভাবে অ্যাপ অপ্টিমাইজ করতে হয়

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

আপনি Unity গেম ইঞ্জিন চালালে, 2019.4.40 বা তার পরবর্তী যেকোনও ভার্সনে আপগ্রেড করুন এবং আপনার গেম আবার এক্সপোর্ট করুন। Android Player সেটিংসের মধ্যে Resizable Window বিকল্পে টিকচিহ্ন দিয়ে রাখুন।

কীভাবে ওভাররাইড বন্ধ বা অপ্ট-আউট করতে হয়

প্রপার্টি ফ্ল্যাগ PROPERTY_COMPAT_ENABLE_FAKE_FOCUS-কে false-এ সেট করুন।

ওভাররাইড অ্যাডজাস্ট করার জন্য প্রপার্টি ফ্ল্যাগ

<property android:name="android.window.PROPERTY_COMPAT_ENABLE_FAKE_FOCUS"
  android:value="true|false"/>

ওভাররাইড পরীক্ষা করার জন্য adb কমান্ড

ওভাররাইড প্রয়োগ করতে:

adb shell am compat enable OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS <package>

ওভাররাইড সরিয়ে দিতে:

adb shell am compat disable OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS <package>

মনে রাখবেন: কমান্ডগুলি শুধুমাত্র সাময়িকভাবে ওভাররাইড প্রয়োগ বা সরিয়ে দেয়।

OVERRIDE_EXCLUDE_CAPTION_INSETS_FROM_APP_BOUNDS

ওভাররাইড চালু করা হলে, অ্যাক্টিভিটি এমন কনফিগারেশন পায় যার মধ্যে ক্যাপশন বার ইনসেট থাকে। সাধারণত, ক্যাপশন বার ইনসেটগুলি কনফিগারেশনে অন্তর্ভুক্ত থাকে না।

ওভাররাইডের মতো একই ফলাফল অ্যাপ কীভাবে পেতে পারে

এজ‑টু‑এজ ডিসপ্লে চালু করুন। এগুলি দেখুন:

কীভাবে অ্যাপ অপ্টিমাইজ করতে হয়

আপনার অ্যাপে এজ‑টু‑এজ ডিসপ্লে চালু করা থাকলে, আপনি এই সমস্যা এড়াতে পারবেন।

কীভাবে ওভাররাইড বন্ধ বা অপ্ট-আউট করতে হয়

প্রপার্টি ফ্ল্যাগ PROPERTY_COMPAT_ALLOW_EXCLUDE_CAPTION_INSETS-কে false-এ সেট করুন।

ওভাররাইড অ্যাডজাস্ট করার জন্য প্রপার্টি ফ্ল্যাগ

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_EXCLUDE_CAPTION_INSETS"
  android:value="true|false"/>

ওভাররাইড পরীক্ষা করার জন্য adb কমান্ড

ওভাররাইড প্রয়োগ করতে:

adb shell am compat enable OVERRIDE_EXCLUDE_CAPTION_INSETS_FROM_APP_BOUNDS <package>

ওভাররাইড সরিয়ে দিতে:

adb shell am compat disable OVERRIDE_EXCLUDE_CAPTION_INSETS_FROM_APP_BOUNDS <package>

মনে রাখবেন: কমান্ডগুলি শুধুমাত্র সাময়িকভাবে ওভাররাইড প্রয়োগ বা সরিয়ে দেয়।

অতিরিক্ত রিসোর্স


  1. ভার্চুয়াল ডিভাইসের মালিক হল একটি বিশ্বস্ত বা বিশেষ সুবিধা প্রাপ্ত অ্যাপ যা ভার্চুয়াল ডিভাইস ম্যানেজ করে। ভার্চুয়াল ডিভাইসের মালিকরা অ্যাপ রেন্ডার করার জন্য ভার্চুয়াল ডিভাইস তৈরি করেন এবং তারপরে ব্যক্তিগত কম্পিউটার, ভার্চুয়াল রিয়ালিটি ডিভাইস বা গাড়ির ইনফোটেনমেন্ট সিস্টেমের মতো রিমোট ডিভাইসে অ্যাপ প্রজেক্ট করেন। ভার্চুয়াল ডিভাইসের মালিক কোনও লোকাল ডিভাইসে আছেন, যেমন ফোন। ↩