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

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

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

Android 16

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

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

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

আপনার অ্যাপ API লেভেল ৩৬ টার্গেট করতে পারে, তবে Android ১৬-এর আচরণ থেকে অপ্ট-আউট করতে পারে, যেক্ষেত্রে 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>

আপনার অ্যাপ Android 16 (API লেভেল 36) বা তার পরবর্তী যেকোনও ভার্সনকে টার্গেট করলে, এই প্রপার্টি বড় ডিসপ্লেতে ডিসপ্লে ওরিয়েন্টেশন লক করে না বা স্ক্রিন রোটেশন আটকায় না।

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

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

  • ট্যাবলেট: 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: অ্যাপে কাজ করে এমন সর্বাধিক অ্যাস্পেক্ট রেশিও নির্দিষ্ট করে। শুধুমাত্র resizeableActivity-এ false সেট করা থাকলে maxAspectRatio সেট করা যাবে।

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

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

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

মানানসই করার বিকল্প উপায়

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

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

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

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

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

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

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

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

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

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

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

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

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

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

সমস্যা

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

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

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

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

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

মানানসই করার বিকল্প উপায়

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

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

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

স্থায়িত্ব ও ধারাবাহিকতা উন্নত করতে গেমের জন্য ডিফল্ট হিসেবে ডিসপ্লে কম্প্যাটিবিলিটি মোড চালু করা থাকে (android:appCategory ফ্ল্যাগের উপর ভিত্তি করে)। সাইজ কম্প্যাটিবিলিটি মোডের মতো ডিসপ্লে কম্প্যাটিবিলিটি মোড অ্যাপের কনফিগারেশন ফ্রিজ করে না। অ্যাপটি এখনও onConfigurationChanged() কলব্যাকের মতো API-এর মাধ্যমে সমস্ত কনফিগারেশন আপডেট পেতে পারে, তবে এটি একটি বিঘ্নিত রিস্টার্ট থেকে রেহাই পায়। এর অর্থ হল, onConfigurationChanged()-এর মতো API-কে সঠিকভাবে সাপোর্ট করে এমন গেমগুলি ডিসপ্লে কম্প্যাটিবিলিটি মোডে থাকলেও তাদের 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)-কে কল করতে পারে এবং ইনফিনিট লুপ চালিয়ে যেতে পারে।

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

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

  • অ্যাক্টিভিটি onCreate() পদ্ধতিতে Activity#setRequestedOrientation()-এর সাথে ডিফল্ট ওরিয়েন্টেশন সেট করুন কারণ ওরিয়েন্টেশন অনুরোধ হ্যান্ডেল না করা কনফিগারেশন পরিবর্তনের মাধ্যমে অপ্রত্যাশিতভাবে ট্রিগার হতে পারে
  • ধরে নিন যে ডিভাইসের (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.MATCH_PARENT-এর পরিবর্তে LayoutParams.WRAP_CONTENT ব্যবহার করে।

মানানসই করার বিকল্প উপায়

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

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

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

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 ডিবাগ ব্রিজ (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 ডিভাইস প্রস্তুতকারকের 'ওরিয়েন্টেশন অনুরোধ উপেক্ষা করুন' সেটিং বন্ধ করে লেটারবক্সিং প্রতিরোধ করে।
Sandbox 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_EXCLUDE_CAPTION_INSETS_FROM_APP_BOUNDS 388014743 ডেস্কটপ উইন্ডোইংয়ে অ্যাক্টিভিটি কনফিগারেশনে অ্যাপ বাউন্ড থেকে ক্যাপশন বার ইনসেট বাদ দেয়, যার ফলে অ্যাপ ক্যাপশন বার ইনসেট ম্যানেজ না করলে ক্যাপশন বারের মাধ্যমে উপরের বা নিচের অ্যাপ UI এলিমেন্ট আড়াল হয়ে যাওয়া বা ক্রপ হয়ে যাওয়া আটকানো যায়।

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) ফিচারটি ঐচ্ছিক হয় এবং Google Play, পিসি (PC) নয় এমন ডিভাইসে অ্যাপ্লিকেশনটি বাদ না দেয়।

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

কোনওটিই নয়।

ওভাররাইড টেস্ট করার জন্য 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() কল করার উত্তরে অ্যাপের ওরিয়েন্টেশন আপডেট করা এড়িয়ে যায়, যখন অ্যাপ আবার চালু হচ্ছে বা অ্যাক্টিভ ক্যামেরা কম্প্যাট ট্রিটমেন্ট আছে।

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

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

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

OVERRIDE_ANY_ORIENTATION দেখুন।

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

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

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

<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 দেখুন।

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

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

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

<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

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

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

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

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

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

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

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

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

<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

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

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

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

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

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

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

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

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

<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

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

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

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

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

OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION দেখুন।

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

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

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

<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() → onStop() → onResume() সাইকেলের পরিবর্তে onResume() → onPause() → onResume() সাইকেল ব্যবহার করে অ্যাক্টিভিটি রিফ্রেশ করার জন্য এটি যে প্যাকেজে প্রয়োগ করা হয় সেটি তৈরি করে।

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

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

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

OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION দেখুন।

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

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

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

<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

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

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

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

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

OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION দেখুন।

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

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

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

<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 সেটিংস থেকে রিসাইজ করা যায় এমন উইন্ডো বিকল্পটি চেক করা অবস্থায় রাখুন।

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

প্রপার্টি ফ্ল্যাগ 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

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

সাধারণত, কনফিগারেশনে অ্যাপ বাউন্ড থেকে ক্যাপশন বার ইনসেট বাদ দেওয়া হয় না এবং Configuration.screenHeightDp ও অ্যাপ বাউন্ড ডেস্কটপ উইন্ডো ক্যাপশন বারের পিছনের অংশ সহ সম্পূর্ণ উইন্ডোর উচ্চতা রিপোর্ট করে (মিনিমাইজ, ম্যাক্সিমাইজ এবং ক্লোজ কন্ট্রোল সহ টাইটেল বার, যা ইমারসিভ মোডেও দৃশ্যমান থাকে):

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

ওভাররাইড চালু করা হলে, সিস্টেম ক্যাপশন বারের উচ্চতা অ্যাপের বাউন্ড থেকে বিয়োগ করে এবং Configuration.screenHeightDp যাতে অ্যাপের লেআউট এরিয়া ক্যাপশন বারের নিচের স্পেসের সাথে অ্যালাইন হয়।

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

এজ-টু-এজ ডিসপ্লে চালু করুন। নিম্নলিখিত বিষয়গুলি দেখুন:

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

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

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

প্রপার্টি ফ্ল্যাগ 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. ভার্চুয়াল ডিভাইসের মালিক হল একটি বিশ্বস্ত বা বিশেষাধিকার প্রাপ্ত অ্যাপ যা ভার্চুয়াল ডিভাইস ম্যানেজ করে। ভার্চুয়াল ডিভাইসের মালিকরা অ্যাপ রেন্ডার করার জন্য ভার্চুয়াল ডিভাইস তৈরি করেন এবং তারপর অ্যাপটি রিমোট ডিভাইসে প্রোজেক্ট করেন, যেমন ব্যক্তিগত কম্পিউটার, ভার্চুয়াল রিয়েলিটি ডিভাইস বা গাড়ির ইনফোটেনমেন্ট সিস্টেম। ভার্চুয়াল ডিভাইসের মালিক স্থানীয় ডিভাইসে আছেন, যেমন ফোন। ↩