মাল্টি-উইন্ডো মোড সমর্থন করে

মাল্টি-উইন্ডো মোড একই সাথে একই স্ক্রিন শেয়ার করতে একাধিক অ্যাপকে সক্ষম করে। অ্যাপ্লিকেশানগুলি পাশাপাশি থাকতে পারে বা অন্যটির উপরে (বিভক্ত-স্ক্রিন মোড), একটি ছোট উইন্ডোতে একটি অ্যাপ অন্য অ্যাপগুলিকে (ছবি-মধ্য-ছবি মোড) ওভারলে করে, বা পৃথক চলমান, আকার পরিবর্তনযোগ্য উইন্ডোতে (ডেস্কটপ উইন্ডো মোড) .

চিত্র 1. স্প্লিট-স্ক্রিন মোডে দুটি অ্যাপ পাশাপাশি প্রদর্শন করুন।

ফোনে স্প্লিট-স্ক্রিন মোড অ্যাক্সেস করার বিষয়ে ব্যবহারকারীর নির্দেশাবলীর জন্য, Pixel ফোনে একই সময়ে দুটি অ্যাপ দেখুন এ যান।

সংস্করণ-নির্দিষ্ট মাল্টি-উইন্ডো বৈশিষ্ট্য

মাল্টি-উইন্ডো ব্যবহারকারীর অভিজ্ঞতা Android এর সংস্করণ এবং ডিভাইসের ধরনের উপর নির্ভর করে:

  • Android 7.0 (API লেভেল 24) ছোট স্ক্রীন ডিভাইসে স্প্লিট-স্ক্রিন মোড এবং নির্বাচিত ডিভাইসে পিকচার-ইন-পিকচার মোড চালু করেছে।

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

    • পিকচার-ইন-পিকচার মোড ব্যবহারকারীদের অন্য অ্যাপের সাথে ইন্টারঅ্যাক্ট করার সময় ভিডিও প্লেব্যাক চালিয়ে যেতে সক্ষম করে ( পিকচার-ইন-পিকচার সাপোর্ট দেখুন)।

    • ডেস্কটপ উইন্ডোজিং মোড , যেখানে ব্যবহারকারীরা স্বাধীনভাবে প্রতিটি ক্রিয়াকলাপের আকার পরিবর্তন করতে পারে, বড় পর্দার ডিভাইসগুলির নির্মাতারা সক্ষম করতে পারেন৷

      আপনার অ্যাপ্লিকেশানটি কীভাবে মাল্টি-উইন্ডো মোড পরিচালনা করে তা আপনি আপনার কার্যকলাপের ন্যূনতম অনুমোদিত মাত্রাগুলি নির্দিষ্ট করে কনফিগার করতে পারেন৷ সিস্টেমটি সর্বদা আপনার অ্যাপকে পূর্ণ স্ক্রীন দেখায় তা নিশ্চিত করতে আপনি resizeableActivity="false" সেট করে আপনার অ্যাপের জন্য মাল্টি-উইন্ডো মোড অক্ষম করতে পারেন।

  • অ্যান্ড্রয়েড 8.0 (API লেভেল 26) পিকচার-ইন-পিকচার মোডকে ছোট পর্দার ডিভাইসে প্রসারিত করে।

  • Android 12 (API লেভেল 31) মাল্টি-উইন্ডো মোড স্ট্যান্ডার্ড আচরণ করে।

    • বড় স্ক্রিনে ( মাঝারি বা প্রসারিত উইন্ডো সাইজ ক্লাস), প্ল্যাটফর্মটি অ্যাপ কনফিগারেশন নির্বিশেষে মাল্টি-উইন্ডো মোডে সমস্ত অ্যাপ সমর্থন করে। resizeableActivity="false" হলে, ডিসপ্লের মাত্রা মিটমাট করার জন্য অ্যাপটিকে সামঞ্জস্যপূর্ণ মোডে রাখা হয়।

    • ছোট স্ক্রিনে ( কমপ্যাক্ট উইন্ডো সাইজ ক্লাস), অ্যাক্টিভিটি মাল্টি-উইন্ডো মোডে চলতে পারে কিনা তা নির্ধারণ করতে সিস্টেমটি একটি অ্যাক্টিভিটির minWidth এবং minHeight চেক করে। resizeableActivity="false" হলে, ন্যূনতম প্রস্থ এবং উচ্চতা নির্বিশেষে অ্যাপটিকে মাল্টি-উইন্ডো মোডে চলতে বাধা দেওয়া হয়।

স্প্লিট-স্ক্রিন মোড

ব্যবহারকারীরা নিম্নলিখিতগুলি করে স্প্লিট-স্ক্রিন মোড সক্রিয় করে:

  1. সাম্প্রতিক স্ক্রীন খুলুন
  2. দেখার জন্য একটি অ্যাপ সোয়াইপ করুন
  3. অ্যাপ শিরোনাম বারে অ্যাপ আইকন টিপুন
  4. স্প্লিট স্ক্রিন মেনু বিকল্পটি নির্বাচন করুন
  5. সাম্প্রতিক স্ক্রীন থেকে অন্য একটি অ্যাপ্লিকেশন নির্বাচন করুন, অথবা সাম্প্রতিক স্ক্রীনটি বন্ধ করুন এবং অন্য একটি অ্যাপ্লিকেশন চালান৷

ব্যবহারকারীরা স্প্লিট-স্ক্রিন মোড থেকে প্রস্থান করে উইন্ডো ডিভাইডারটিকে স্ক্রীনের প্রান্তে টেনে-উপরে বা নিচে, বাম বা ডানে।

সংলগ্ন লঞ্চ

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

FLAG_ACTIVITY_LAUNCH_ADJACENT এন্ড্রয়েড 7.0 (API লেভেল 24) এ প্রবর্তন করা হয়েছিল যাতে অ্যাপ্লিকেশানগুলিকে স্প্লিট-স্ক্রিন মোডে চলমান উইন্ডোতে অ্যাক্টিভিটি চালু করা যায়৷

অ্যান্ড্রয়েড 12L (এপিআই লেভেল 32) এবং উচ্চতর স্প্লিট-স্ক্রিন মোড সক্রিয় করতে এবং তারপরে সংলগ্ন উইন্ডোতে ক্রিয়াকলাপগুলি চালু করতে পূর্ণ স্ক্রীনে চলমান অ্যাপগুলিকে সক্ষম করতে পতাকার সংজ্ঞা প্রসারিত করেছে।

একটি সংলগ্ন কার্যকলাপ চালু করতে, FLAG_ACTIVITY_NEW_TASK এর সাথে FLAG_ACTIVITY_LAUNCH_ADJACENT ব্যবহার করুন, উদাহরণস্বরূপ:

fun openUrlInAdjacentWindow(url:
String) { Intent(Intent.ACTION_VIEW).apply { data = Uri.parse(url)
addFlags(Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT or Intent.FLAG_ACTIVITY_NEW_TASK)
 }.also { intent -> startActivity(intent) } }

মাল্টি-উইন্ডো মোডে কার্যকলাপ জীবনচক্র

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

মাল্টি-জীবনবৃত্তান্ত

অ্যান্ড্রয়েড 10 (এপিআই স্তর 29) এবং উচ্চতর সংস্করণগুলি মাল্টি-রিজুমে সমর্থন করে—যখন ডিভাইসটি মাল্টি-উইন্ডো মোডে থাকে তখন সমস্ত ক্রিয়াকলাপ RESUMED অবস্থায় থাকে। যদি একটি স্বচ্ছ কার্যকলাপ কার্যকলাপের উপরে থাকে বা কার্যকলাপটি ফোকাসযোগ্য না হয়, উদাহরণস্বরূপ, ক্রিয়াকলাপটি পিকচার-ইন-পিকচার মোডে থাকে তাহলে একটি কার্যকলাপ থামানো যেতে পারে। এটাও সম্ভব যে একটি নির্দিষ্ট সময়ে কোনো কার্যকলাপে ফোকাস নেই, উদাহরণস্বরূপ, যদি বিজ্ঞপ্তির ড্রয়ার খোলা থাকে। onStop() পদ্ধতি যথারীতি কাজ করে: যে কোনো সময় স্ক্রীন থেকে কোনো কার্যকলাপ বন্ধ হয়ে গেলে পদ্ধতিটিকে বলা হয়।

অ্যান্ড্রয়েড 9 (API লেভেল 28) চালিত নির্বাচিত ডিভাইসগুলিতে মাল্টি-রিজুমেও উপলব্ধ। Android 9 ডিভাইসে মাল্টি-রিজুমে বেছে নিতে, নিম্নলিখিত ম্যানিফেস্ট মেটাডেটা যোগ করুন:

<meta-data android:name="android.allow_multiple_resumed_activities" android:value="true" />

একটি প্রদত্ত ডিভাইস এই ম্যানিফেস্ট মেটাডেটা সমর্থন করে তা যাচাই করতে, ডিভাইসের স্পেসিফিকেশন পড়ুন।

অ্যান্ড্রয়েড 9

অ্যান্ড্রয়েড 9 (এপিআই লেভেল 28) এবং তার নিচের মাল্টি-উইন্ডো মোডে, শুধুমাত্র একটি নির্দিষ্ট সময়ে ব্যবহারকারী যে কার্যকলাপের সাথে অতি সম্প্রতি ইন্টারঅ্যাক্ট করেছেন তা সক্রিয় থাকে। এই ক্রিয়াকলাপটিকে শীর্ষস্থানীয় হিসাবে বিবেচনা করা হয় এবং এটি RESUMED অবস্থায় একমাত্র কার্যকলাপ। অন্যান্য সমস্ত দৃশ্যমান কার্যক্রম STARTED কিন্তু RESUMED হয়নি। যাইহোক, সিস্টেম এই দৃশ্যমান কিন্তু পুনরায় শুরু না হওয়া ক্রিয়াকলাপগুলিকে দৃশ্যমান নয় এমন ক্রিয়াকলাপগুলির চেয়ে বেশি অগ্রাধিকার দেয়৷ ব্যবহারকারী যদি দৃশ্যমান ক্রিয়াকলাপের একটির সাথে ইন্টারঅ্যাক্ট করে, সেই কার্যকলাপটি পুনরায় শুরু করা হয়, এবং পূর্বের শীর্ষস্থানীয় কার্যকলাপটি STARTED অবস্থায় প্রবেশ করে।

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

কনফিগারেশন পরিবর্তন

ব্যবহারকারী যখন একটি অ্যাপকে মাল্টি-উইন্ডো মোডে রাখে, তখন সিস্টেমটি হ্যান্ডেল কনফিগারেশন পরিবর্তনগুলিতে উল্লেখিত একটি কনফিগারেশন পরিবর্তনের কার্যকলাপকে অবহিত করে। এটিও ঘটে যখন ব্যবহারকারী অ্যাপটির আকার পরিবর্তন করে বা অ্যাপটিকে আবার পূর্ণ স্ক্রীন মোডে রাখে।

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

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

একচেটিয়া সম্পদ অ্যাক্সেস

মাল্টি-রিজুমে বৈশিষ্ট্য সমর্থন করতে, onTopResumedActivityChanged() লাইফসাইকেল কলব্যাক ব্যবহার করুন।

কলব্যাক চালু করা হয় যখন কোনো অ্যাক্টিভিটি শীর্ষস্থানীয় পুনরায় শুরু করা অ্যাক্টিভিটি পজিশন লাভ করে বা হারায়, যা গুরুত্বপূর্ণ যখন কোনো অ্যাক্টিভিটি শেয়ার করা সিঙ্গেলটন রিসোর্স ব্যবহার করে, যেমন মাইক্রোফোন বা ক্যামেরা:

override fun
onTopResumedActivityChanged(topResumed: Boolean) { if (topResumed) { // Top
resumed activity. // Can be a signal to re-acquire exclusive resources. } else {
// No longer the top resumed activity. } }

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

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

ক্যামেরা ব্যবহার করে এমন অ্যাপগুলির জন্য, CameraManager.AvailabilityCallback#onCameraAccessPrioritiesChanged() একটি ইঙ্গিত দেয় যে ক্যামেরায় অ্যাক্সেস পাওয়ার চেষ্টা করার জন্য এটি একটি ভাল সময় হতে পারে৷ এই পদ্ধতিটি Android 10 (API স্তর 29) হিসাবে উপলব্ধ।

মনে রাখবেন যে resizeableActivity=false এক্সক্লুসিভ ক্যামেরা অ্যাক্সেসের গ্যারান্টি নয়, যেহেতু ক্যামেরা ব্যবহার করে এমন অন্যান্য অ্যাপগুলি অন্য ডিসপ্লেতে খোলা যেতে পারে।

চিত্র 2. মাল্টি-উইন্ডো মোডে ক্যামেরা।

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

একটি অ্যাপ একটি CameraDevice.StateCallback#onDisconnected() কলব্যাক পাওয়ার পরে, ক্যামেরা ডিভাইসে পরবর্তী কলগুলি একটি CameraAccessException নিক্ষেপ করবে৷

মাল্টি-ডিসপ্লে

Android 10 (API লেভেল 29) সেকেন্ডারি ডিসপ্লেতে ক্রিয়াকলাপ সমর্থন করে। একাধিক ডিসপ্লে সহ একটি ডিভাইসে কোনো অ্যাক্টিভিটি চলমান থাকলে, ব্যবহারকারীরা অ্যাক্টিভিটিটিকে এক ডিসপ্লে থেকে অন্য ডিসপ্লেতে নিয়ে যেতে পারেন। মাল্টি-রিজুমে মাল্টি-স্ক্রিন পরিস্থিতিতেও প্রযোজ্য; একই সময়ে বেশ কয়েকটি ক্রিয়াকলাপ ব্যবহারকারীর ইনপুট গ্রহণ করতে পারে।

একটি অ্যাপ নির্দিষ্ট করতে পারে যে কোন ডিসপ্লেতে এটি চালু হবে বা কখন এটি অন্য কার্যকলাপ তৈরি করবে। এই আচরণটি ম্যানিফেস্ট ফাইলে সংজ্ঞায়িত অ্যাক্টিভিটি লঞ্চ মোড এবং অ্যাক্টিভিটি চালুকারী সত্তা দ্বারা সেট করা অভিপ্রায় ফ্ল্যাগ এবং বিকল্পগুলির উপর নির্ভর করে। আরো বিস্তারিত জানার জন্য ActivityOptions ক্লাস দেখুন।

যখন একটি ক্রিয়াকলাপ একটি সেকেন্ডারি ডিসপ্লেতে চলে যায়, তখন এটি একটি প্রসঙ্গ আপডেট, উইন্ডোর আকার পরিবর্তন এবং কনফিগারেশন এবং সংস্থান পরিবর্তনের মধ্য দিয়ে যেতে পারে। যদি কার্যকলাপটি কনফিগারেশন পরিবর্তন পরিচালনা করে, তবে কার্যকলাপটি onConfigurationChanged() এ অবহিত করা হয়; অন্যথায়, কার্যকলাপ পুনরায় চালু করা হয়.

কনফিগারেশন পরিবর্তন পরিচালনা করলে একটি কার্যকলাপের বর্তমান প্রদর্শন onCreate() এবং onConfigurationChanged() পরীক্ষা করা উচিত। ডিসপ্লে পরিবর্তন হলে রিসোর্স এবং লেআউট আপডেট করা নিশ্চিত করুন।

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

চিত্র 3. একাধিক প্রদর্শনে একটি কার্যকলাপের একাধিক দৃষ্টান্ত।

আপনি Android 8.0-এ প্রবর্তিত মাল্টি-ডিসপ্লে API সম্পর্কেও পড়তে চাইতে পারেন।

কার্যকলাপ বনাম অ্যাপ্লিকেশন প্রসঙ্গ

মাল্টি-ডিসপ্লেতে সঠিক প্রসঙ্গ ব্যবহার করা অত্যন্ত গুরুত্বপূর্ণ। সংস্থানগুলি অ্যাক্সেস করার সময়, কার্যকলাপের প্রসঙ্গ (যা প্রদর্শিত হয়) অ্যাপ্লিকেশন প্রসঙ্গ (যা নয়) থেকে আলাদা।

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

অ্যাক্টিভিটি উইন্ডো কনফিগারেশন এবং প্যারেন্ট ডিসপ্লে সম্পদ এবং প্রসঙ্গ সংজ্ঞায়িত করে। নিম্নরূপ বর্তমান প্রদর্শন পান:

val activityDisplay = activity.getDisplay()

বর্তমান কার্যকলাপ উইন্ডো মেট্রিক্স পান:

val windowMetrics = activity.getWindowManager().getCurrentWindowMetrics()

বর্তমান সিস্টেম কনফিগারেশনের জন্য সর্বাধিক উইন্ডো মেট্রিক্স পান:

val maximumWindowMetrics = activity.getWindowManager().getMaximumWindowMetrics()

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

কাটআউট প্রদর্শন করুন

ভাঁজযোগ্য ডিভাইসগুলির ভাঁজ করা এবং খোলার সময় আলাদা কাটআউট জ্যামিতি থাকতে পারে। কাটআউট সমস্যা এড়াতে, সাপোর্ট ডিসপ্লে কাটআউট দেখুন।

সেকেন্ডারি ডিসপ্লে

আপনি DisplayManager সিস্টেম পরিষেবা থেকে উপলব্ধ প্রদর্শনগুলি পেতে পারেন:

val displayManager =
getSystemService(Context.DISPLAY_SERVICE) as DisplayManager val displays =
displayManager.getDisplays()

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

একটি ডিসপ্লেতে একটি কার্যকলাপ চালু করতে পারে কিনা তা নির্ধারণ করুন:

val activityManager =
getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager val
activityAllowed = activityManager.isActivityStartAllowedOnDisplay(context,
displayId, intent)

তারপর ডিসপ্লেতে কার্যকলাপ চালু করুন:

val options = ActivityOptions.makeBasic()
options.setLaunchDisplayId(targetDisplay.displayId) startActivity(intent,
options.toBundle())

মাল্টি-ডিসপ্লে সমর্থন

Android সফ্টওয়্যার কীবোর্ড, ওয়ালপেপার এবং লঞ্চারগুলির জন্য মাল্টি-ডিসপ্লে সমর্থন প্রদান করে৷

সফটওয়্যার কীবোর্ড

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

চিত্র 4. একটি সেকেন্ডারি ডিসপ্লেতে কীবোর্ড।

ওয়ালপেপার

অ্যান্ড্রয়েড 10 (এপিআই লেভেল 29), সেকেন্ডারি স্ক্রিনে ওয়ালপেপার থাকতে পারে। ফ্রেমওয়ার্ক প্রতিটি প্রদর্শনের জন্য WallpaperService.Engine এর একটি পৃথক উদাহরণ তৈরি করে। নিশ্চিত করুন যে প্রতিটি ইঞ্জিনের পৃষ্ঠটি স্বাধীনভাবে আঁকা হয়েছে। বিকাশকারীরা WallpaperService.Engine#getDisplayContext() এ প্রদর্শনের প্রসঙ্গ ব্যবহার করে সম্পদ লোড করতে পারে। এছাড়াও, নিশ্চিত করুন যে আপনার WallpaperInfo.xml ফাইলটি android:supportsMultipleDisplays="true" সেট করেছে।

চিত্র 5. ফোন এবং সেকেন্ডারি ডিসপ্লেতে ওয়ালপেপার।

লঞ্চার

একটি নতুন অভিপ্রায় ফিল্টার বিভাগ, SECONDARY_HOME , সেকেন্ডারি স্ক্রিনের জন্য একটি উত্সর্গীকৃত কার্যকলাপ প্রদান করে৷ কার্যকলাপের দৃষ্টান্তগুলি সমস্ত ডিসপ্লেতে ব্যবহৃত হয় যা সিস্টেম সজ্জাকে সমর্থন করে, প্রতি ডিসপ্লেতে একটি করে।

<activity>
    ...
    <intent-filter>
        <category android:name="android.intent.category.SECONDARY_HOME" />
        ...
    </intent-filter>
</activity>

ক্রিয়াকলাপের একটি লঞ্চ মোড থাকতে হবে যা একাধিক দৃষ্টান্ত প্রতিরোধ করে না এবং এটি বিভিন্ন স্ক্রীন আকারের সাথে মানিয়ে নিতে পারে। লঞ্চ মোড singleInstance বা singleTask হতে পারে না।

উদাহরণস্বরূপ, Launcher3 এর AOSP বাস্তবায়ন একটি SECONDARY_HOME কার্যকলাপকে সমর্থন করে।

ছবি 6. ফোনে মেটেরিয়াল ডিজাইন লঞ্চার।
চিত্র 7. সেকেন্ডারি ডিসপ্লেতে মেটেরিয়াল ডিজাইন লঞ্চার।

উইন্ডো মেট্রিক্স

অ্যান্ড্রয়েড 11 (এপিআই স্তর 30) মাল্টি-উইন্ডো মোডে চলমান অ্যাপগুলির সীমানা প্রদান করতে নিম্নলিখিত WindowManager পদ্ধতিগুলি চালু করেছে:

  • getCurrentWindowMetrics() : সিস্টেমের বর্তমান উইন্ডোজ অবস্থার জন্য একটি WindowMetrics অবজেক্ট প্রদান করে।
  • getMaximumWindowMetrics() : সিস্টেমের সবচেয়ে বড় সম্ভাব্য উইন্ডোজ অবস্থার জন্য WindowMetrics প্রদান করে।

Jetpack WindowManager লাইব্রেরি পদ্ধতিগুলি computeCurrentWindowMetrics() এবং computeMaximumWindowMetrics() যথাক্রমে অনুরূপ কার্যকারিতা অফার করে, কিন্তু API স্তর 14 এর সাথে পিছিয়ে থাকা সামঞ্জস্যের সাথে।

বর্তমান ডিসপ্লে ছাড়া অন্য ডিসপ্লেগুলির জন্য মেট্রিক্স পেতে, নিম্নলিখিতগুলি করুন (কোড স্নিপেটে দেখানো হয়েছে):

  • একটি প্রদর্শনের প্রসঙ্গ তৈরি করুন
  • প্রদর্শনের জন্য একটি উইন্ডো প্রসঙ্গ তৈরি করুন
  • উইন্ডো প্রসঙ্গের WindowManager পান
  • অ্যাপে উপলভ্য সর্বাধিক প্রদর্শন এলাকার WindowMetrics পান

val windowMetrics =
context.createDisplayContext(display)
.createWindowContext(WindowManager.LayoutParams.TYPE_APPLICATION, null)
.getSystemService(WindowManager::class.java) .maximumWindowMetrics

অপ্রচলিত পদ্ধতি

Display পদ্ধতি getSize() এবং getMetrics() নতুন WindowManager পদ্ধতির পক্ষে API স্তর 30-এ অবমূল্যায়িত করা হয়েছে।

Android 12 (API লেভেল 31) Display পদ্ধতিগুলি getRealSize() এবং getRealMetrics() বর্জন করে এবং getMaximumWindowMetrics() এর আচরণের সাথে আরও ঘনিষ্ঠভাবে মেলে তাদের আচরণ আপডেট করে।

মাল্টি-উইন্ডো মোড কনফিগারেশন

যদি আপনার অ্যাপটি Android 7.0 (API লেভেল 24) বা উচ্চতরকে লক্ষ্য করে, তাহলে আপনি কনফিগার করতে পারেন যে কীভাবে এবং আপনার অ্যাপের কার্যকলাপ মাল্টি-উইন্ডো মোড সমর্থন করে। আপনি আকার এবং বিন্যাস উভয় নিয়ন্ত্রণ করতে আপনার ম্যানিফেস্টে বৈশিষ্ট্যগুলি সেট করতে পারেন৷ একটি রুট কার্যকলাপের বৈশিষ্ট্য সেটিংস তার টাস্ক স্ট্যাকের মধ্যে সমস্ত কার্যকলাপের জন্য প্রযোজ্য। উদাহরণস্বরূপ, যদি রুট কার্যকলাপে android:resizeableActivity="true" থাকে, তাহলে টাস্ক স্ট্যাকের সমস্ত অ্যাক্টিভিটি রিসাইজযোগ্য। কিছু বৃহত্তর ডিভাইসে, যেমন Chromebooks, আপনি android:resizeableActivity="false" উল্লেখ করলেও আপনার অ্যাপটি একটি পরিবর্তনযোগ্য উইন্ডোতে চলতে পারে। যদি এটি আপনার অ্যাপটি ভেঙে দেয়, তাহলে আপনি এই ধরনের ডিভাইসে আপনার অ্যাপের উপলব্ধতা সীমাবদ্ধ করতে Google Play-তে ফিল্টার ব্যবহার করতে পারেন।

মাল্টি-উইন্ডো মোডে Android 12 (API লেভেল 31) ডিফল্ট। বড় স্ক্রিনে ( মাঝারি বা প্রসারিত উইন্ডো সাইজ ক্লাস), অ্যাপ কনফিগারেশন নির্বিশেষে সমস্ত অ্যাপ মাল্টি-উইন্ডো মোডে চলে। ছোট স্ক্রিনে, সিস্টেমটি একটি কার্যকলাপের minWidth , minHeight , এবং resizeableActivity সেটিংস পরীক্ষা করে যে কার্যকলাপটি মাল্টি-উইন্ডো মোডে চলতে পারে কিনা।

resizeableActivity

API স্তর 30 এবং তার নীচের জন্য মাল্টি-উইন্ডো মোড সক্ষম বা নিষ্ক্রিয় করতে আপনার ম্যানিফেস্টের <activity> বা <application> উপাদানটিতে এই বৈশিষ্ট্যটি সেট করুন:

<application
  android:name=".MyActivity"
  android:resizeableActivity=["true" | "false"] />;

যদি এই বৈশিষ্ট্যটি true সেট করা থাকে, কার্যকলাপটি স্প্লিট-স্ক্রিন এবং ডেস্কটপ উইন্ডো মোডে চালু করা যেতে পারে। অ্যাট্রিবিউটটি false সেট করা থাকলে, কার্যকলাপটি মাল্টি-উইন্ডো মোড সমর্থন করে না। যদি মানটি মিথ্যা হয়, এবং ব্যবহারকারী মাল্টি-উইন্ডো মোডে অ্যাক্টিভিটি চালু করার চেষ্টা করেন, তাহলে অ্যাক্টিভিটি পুরো স্ক্রিনটি দখল করে নেয়।

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

যদি আপনার অ্যাপ এপিআই লেভেল 31 বা তার বেশি টার্গেট করে, তাহলে এই অ্যাট্রিবিউটটি ছোট এবং বড় স্ক্রিনে ভিন্নভাবে কাজ করে:

  • বড় স্ক্রীন ( মাঝারি বা প্রসারিত উইন্ডো সাইজ ক্লাস): সমস্ত অ্যাপ্লিকেশন মাল্টি-উইন্ডো মোড সমর্থন করে। বৈশিষ্ট্যটি নির্দেশ করে যে একটি কার্যকলাপের আকার পরিবর্তন করা যেতে পারে কিনা। resizeableActivity="false" হলে, ডিসপ্লে ডাইমেনশনের সাথে সামঞ্জস্য করার জন্য অ্যাপটিকে সামঞ্জস্যপূর্ণ মোডে রাখা হয়।
  • ছোট পর্দা ( কমপ্যাক্ট উইন্ডো সাইজ ক্লাস): resizeableActivity="true" এবং কার্যকলাপ ন্যূনতম প্রস্থ এবং ন্যূনতম উচ্চতা মাল্টি-উইন্ডো প্রয়োজনীয়তার মধ্যে থাকলে, কার্যকলাপ মাল্টি-উইন্ডো মোড সমর্থন করে। যদি resizeableActivity="false" হয়, কার্যকলাপটি ন্যূনতম প্রস্থ এবং উচ্চতা নির্বিশেষে একাধিক-উইন্ডো মোড সমর্থন করে না।

supportsPictureInPicture

এই অ্যাট্রিবিউটটি আপনার ম্যানিফেস্টের <activity> নোডে সেট করুন যে কার্যকলাপটি পিকচার-ইন-পিকচার মোড সমর্থন করে কিনা তা নির্দেশ করতে।

<activity
  android:name=".MyActivity"
  android:supportsPictureInPicture=["true" | "false"] />

configChanges

মাল্টি-উইন্ডো কনফিগারেশন পরিচালনা করার জন্য নিজেকে পরিবর্তন করুন, যেমন একজন ব্যবহারকারী যখন একটি উইন্ডোর আকার পরিবর্তন করেন, অন্তত নিম্নলিখিত মান সহ আপনার অ্যাপ ম্যানিফেস্ট <activity> নোডে android:configChanges অ্যাট্রিবিউট যোগ করুন:

<activity
  android:name=".MyActivity"
  android:configChanges="screenSize | smallestScreenSize
      | screenLayout | orientation" />

android:configChanges যোগ করার পরে, আপনার কার্যকলাপ এবং টুকরোগুলি ধ্বংস এবং পুনরায় তৈরি করার পরিবর্তে onConfigurationChanged() এ একটি কলব্যাক পাবে। তারপরে আপনি ম্যানুয়ালি আপনার ভিউ আপডেট করতে পারেন, রিসোর্স রিলোড করতে পারেন এবং প্রয়োজন অনুযায়ী অন্যান্য ক্রিয়াকলাপ সম্পাদন করতে পারেন।

<layout>

অ্যান্ড্রয়েড 7.0 (এপিআই লেভেল 24) এবং উচ্চতর, <layout> ম্যানিফেস্ট উপাদানটি বেশ কয়েকটি বৈশিষ্ট্য সমর্থন করে যা মাল্টি-উইন্ডো মোডে একটি কার্যকলাপ কীভাবে আচরণ করে তা প্রভাবিত করে:

  • android:defaultHeight , android:defaultWidth : ডেস্কটপ উইন্ডোজিং মোডে চালু হলে কার্যকলাপের ডিফল্ট উচ্চতা এবং প্রস্থ।

  • android:gravity : ডেস্কটপ উইন্ডোজিং মোডে চালু হলে ক্রিয়াকলাপের প্রাথমিক স্থান নির্ধারণ। উপযুক্ত মানের জন্য Gravity শ্রেণী দেখুন।

  • android:minHeight , android:minWidth : ন্যূনতম উচ্চতা এবং ন্যূনতম প্রস্থ ক্রিয়াকলাপের জন্য স্প্লিট-স্ক্রিন এবং ডেস্কটপ উভয় মোডে। ব্যবহারকারী যদি স্প্লিট-স্ক্রিন মোডে বিভাজকটিকে নির্দিষ্ট ন্যূনতম থেকে ছোট করার জন্য একটি ক্রিয়াকলাপ তৈরি করে তবে সিস্টেমটি ব্যবহারকারীর অনুরোধের আকারে কার্যকলাপটি ক্রপ করে।

নিম্নলিখিত কোডটি দেখায় কিভাবে একটি কার্যকলাপের ডিফল্ট আকার এবং অবস্থান এবং ন্যূনতম আকার নির্দিষ্ট করতে হয় যখন কার্যকলাপটি ডেস্কটপ উইন্ডো মোডে প্রদর্শিত হয়:

<activity android:name=".MyActivity">
    <layout android:defaultHeight="500dp"
          android:defaultWidth="600dp"
          android:gravity="top|end|..."
          android:minHeight="450dp"
          android:minWidth="300dp" />
</activity>

রানটাইমে মাল্টি-উইন্ডো মোড

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

বহু-উইন্ডো মোডে অক্ষম বৈশিষ্ট্য

মাল্টি-উইন্ডো মোডে, অ্যান্ড্রয়েড এমন বৈশিষ্ট্যগুলিকে অক্ষম বা উপেক্ষা করতে পারে যেগুলি এমন একটি কার্যকলাপের ক্ষেত্রে প্রযোজ্য নয় যা ডিভাইসের স্ক্রীনকে অন্যান্য ক্রিয়াকলাপ বা অ্যাপগুলির সাথে ভাগ করছে৷

উপরন্তু, কিছু সিস্টেম UI কাস্টমাইজেশন অপশন নিষ্ক্রিয় করা আছে। উদাহরণস্বরূপ, অ্যাপ্লিকেশানগুলি মাল্টি-উইন্ডো মোডে চললে স্ট্যাটাস বার লুকাতে পারে না ( সিস্টেম UI দৃশ্যমানতা নিয়ন্ত্রণ করুন দেখুন)।

সিস্টেমটি android:screenOrientation বৈশিষ্ট্যের পরিবর্তন উপেক্ষা করে।

মাল্টি-উইন্ডো মোড প্রশ্ন এবং কলব্যাক

Activity ক্লাস মাল্টি-উইন্ডো মোড সমর্থন করার জন্য নিম্নলিখিত পদ্ধতিগুলি অফার করে:

  • isInMultiWindowMode() : কার্যকলাপটি মাল্টি-উইন্ডো মোডে আছে কিনা তা নির্দেশ করে।

  • isInPictureInPictureMode() : অ্যাক্টিভিটি পিকচার-ইন-পিকচার মোডে আছে কিনা তা নির্দেশ করে।

  • onMultiWindowModeChanged() : যখনই কার্যকলাপ মাল্টি-উইন্ডো মোডে বা এর বাইরে যায় তখন সিস্টেমটি এই পদ্ধতিটিকে কল করে। সিস্টেমটি পদ্ধতিটিকে সত্যের একটি মান পাস করে যদি কার্যকলাপটি মাল্টি-উইন্ডো মোডে প্রবেশ করে বা যদি কার্যকলাপটি মাল্টি-উইন্ডো মোড ছেড়ে চলে যায় তবে মিথ্যা।

  • onPictureInPictureModeChanged() : যখনই কার্যকলাপ পিকচার-ইন-পিকচার মোডে বা বাইরে যায় তখন সিস্টেম এই পদ্ধতিটিকে কল করে। সিস্টেমটি পদ্ধতিটিকে সত্যের একটি মান পাস করে যদি কার্যকলাপটি পিকচার-ইন-পিকচার মোডে প্রবেশ করে বা যদি কার্যকলাপটি পিকচার-ইন-পিকচার মোড ছেড়ে চলে যায় তবে মিথ্যা।

Fragment ক্লাস এই পদ্ধতিগুলির অনেকগুলির সংস্করণ প্রকাশ করে; উদাহরণস্বরূপ, Fragment.onMultiWindowModeChanged()

পিকচার-ইন-পিকচার মোড

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

মাল্টি-উইন্ডো মোডে নতুন কার্যকলাপ

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

যদি একটি ডিভাইস ডেস্কটপ উইন্ডোজিং মোডে থাকে এবং আপনি একটি নতুন কার্যকলাপ চালু করেন, তাহলে ActivityOptions.setLaunchBounds() কল করে আপনি নতুন কার্যকলাপের মাত্রা এবং স্ক্রীন অবস্থান নির্দিষ্ট করতে পারেন। ডিভাইসটি মাল্টি-উইন্ডো মোডে না থাকলে পদ্ধতিটির কোন প্রভাব নেই।

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

Android 12 (API লেভেল 31) অ্যাপগুলিকে একাধিক অ্যাক্টিভিটিগুলির মধ্যে একটি অ্যাপ্লিকেশনের টাস্ক উইন্ডোকে বিভক্ত করতে সক্ষম করে। একটি XML কনফিগারেশন ফাইল তৈরি করে বা Jetpack WindowManager API কল করার মাধ্যমে আপনি নির্ধারণ করেন যে আপনার অ্যাপ কীভাবে তার কার্যকলাপগুলি প্রদর্শন করবে—পূর্ণ স্ক্রীনে, পাশাপাশি, অথবা স্ট্যাক করা হয়েছে৷

টেনে আনুন

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

মাল্টি-ইনস্ট্যান্স

প্রতিটি রুট কার্যকলাপের নিজস্ব কাজ আছে, যা একটি পৃথক প্রক্রিয়ায় চলে এবং নিজস্ব উইন্ডোতে প্রদর্শিত হয়। একটি পৃথক উইন্ডোতে আপনার অ্যাপের একটি নতুন দৃষ্টান্ত চালু করতে, আপনি FLAG_ACTIVITY_NEW_TASK পতাকা দিয়ে নতুন কার্যকলাপ শুরু করতে পারেন৷ আপনি নতুন উইন্ডোর জন্য একটি নির্দিষ্ট অবস্থানের জন্য অনুরোধ করতে কয়েকটি মাল্টি-উইন্ডো বৈশিষ্ট্যের সাথে এটি একত্রিত করতে পারেন। উদাহরণস্বরূপ, একটি শপিং অ্যাপ পণ্যের তুলনা করতে একাধিক উইন্ডো প্রদর্শন করতে পারে।

অ্যান্ড্রয়েড 12 (এপিআই লেভেল 31) আপনাকে একই টাস্ক উইন্ডোতে পাশাপাশি অ্যাক্টিভিটির দুটি উদাহরণ চালু করতে সক্ষম করে।

আপনি যদি ব্যবহারকারীদের অ্যাপ্লিকেশন লঞ্চার বা টাস্কবার থেকে আপনার অ্যাপ্লিকেশনের অন্য একটি উদাহরণ শুরু করার অনুমতি দিতে চান তবে নিশ্চিত করুন যে আপনার লঞ্চার কার্যকলাপ android:resizeableActivity="true" সেট করে এবং একাধিক দৃষ্টান্ত প্রতিরোধ করে এমন একটি লঞ্চ মোড ব্যবহার করে না৷ যেমন FLAG_ACTIVITY_MULTIPLE_TASK বা FLAG_ACTIVITY_NEW_DOCUMENT সেট করা থাকলে একটি singleInstancePerTask অ্যাক্টিভিটি বিভিন্ন টাস্কে একাধিকবার ইনস্ট্যান্ট করা যেতে পারে।

মাল্টি-প্যানেল লেআউটের সাথে মাল্টি-ইনস্ট্যান্সকে বিভ্রান্ত করবেন না, যেমন একটি তালিকা-বিশদ উপস্থাপনা যা SlidingPaneLayout ব্যবহার করে, যা একটি একক উইন্ডোর ভিতরে চলে।

মনে রাখবেন যে যখন একাধিক দৃষ্টান্ত একটি ভাঁজযোগ্য ডিভাইসে পৃথক উইন্ডোতে চলছে, ভঙ্গি পরিবর্তন হলে এক বা একাধিক দৃষ্টান্ত পটভূমিতে পাঠানো হতে পারে। উদাহরণস্বরূপ, অনুমান করুন একটি ডিভাইস খোলা হয়েছে এবং ভাঁজের উভয় পাশে দুটি উইন্ডোতে দুটি অ্যাপের দৃষ্টান্ত চলছে৷ ডিভাইসটি ভাঁজ করা থাকলে, ছোট পর্দায় উভয় দৃষ্টান্তের জন্য উইন্ডোজ ফিট করার চেষ্টা করার পরিবর্তে একটি উদাহরণ বন্ধ হয়ে যেতে পারে।

মাল্টি-উইন্ডো মোড যাচাইকরণ

আপনার অ্যাপটি এপিআই লেভেল 24 বা উচ্চতরকে লক্ষ্য করুক বা না করুক, কোন ব্যবহারকারী Android 7.0 বা তার উচ্চতর চলমান ডিভাইসে মাল্টি-উইন্ডো মোডে এটি চালু করার চেষ্টা করলে মাল্টি-উইন্ডো মোডে এটি কীভাবে আচরণ করে তা আপনার যাচাই করা উচিত।

টেস্ট ডিভাইস

যে ডিভাইসগুলি Android 7.0 (API লেভেল 24) বা উচ্চতর মাল্টি-উইন্ডো মোড সমর্থন করে।

API স্তর 23 বা তার কম

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

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

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

API লেভেল 24 থেকে 30

যদি আপনার অ্যাপটি API লেভেল 24 থেকে 30 পর্যন্ত লক্ষ্য করে এবং মাল্টি-উইন্ডো সমর্থন নিষ্ক্রিয় না করে, তাহলে স্প্লিট-স্ক্রিন এবং ডেস্কটপ উইন্ডোিং মোড উভয়ের অধীনে নিম্নলিখিত আচরণটি যাচাই করুন:

  • অ্যাপ্লিকেশানটি পূর্ণ স্ক্রীন চালু করুন, তারপরে সাম্প্রতিক বোতামটি দীর্ঘ-টিপে মাল্টি-উইন্ডো মোডে স্যুইচ করুন৷ অ্যাপটি সঠিকভাবে সুইচ করছে কিনা তা যাচাই করুন।

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

  • স্ক্রিন ডিভাইডার টেনে স্প্লিট-স্ক্রিন মোডে আপনার অ্যাপের আকার পরিবর্তন করুন। যাচাই করুন যে অ্যাপটি ক্র্যাশ না করে আকার পরিবর্তন করে এবং প্রয়োজনীয় UI উপাদানগুলি দৃশ্যমান।

  • আপনি যদি আপনার অ্যাপের জন্য ন্যূনতম মাত্রা নির্দিষ্ট করে থাকেন, তাহলে অ্যাপটির আকার পরিবর্তন করার চেষ্টা করুন যাতে এর উইন্ডোর আকার সেই মাত্রার থেকে ছোট হয়। যাচাই করুন যে আপনি নির্দিষ্ট ন্যূনতম মাত্রার চেয়ে ছোট আকারে অ্যাপটির আকার পরিবর্তন করতে পারবেন না।

  • সমস্ত পরীক্ষার মাধ্যমে, আপনার অ্যাপের কর্মক্ষমতা গ্রহণযোগ্য কিনা তা যাচাই করুন। উদাহরণস্বরূপ, অ্যাপটির আকার পরিবর্তন করার পরে UI আপডেট করতে খুব বেশি ব্যবধান নেই তা যাচাই করুন।

API স্তর 31 বা উচ্চতর

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

পরীক্ষা চেকলিস্ট

মাল্টি-উইন্ডো মোডে আপনার অ্যাপের কর্মক্ষমতা যাচাই করতে, নিম্নলিখিত ক্রিয়াকলাপগুলি চেষ্টা করুন৷ আপনার এই ক্রিয়াকলাপগুলিকে স্প্লিট-স্ক্রিন এবং ডেস্কটপ উইন্ডোিং মোডে চেষ্টা করা উচিত, অন্যথায় উল্লেখ করা ছাড়া।

  • মাল্টি-উইন্ডো মোডে প্রবেশ করুন এবং ছেড়ে দিন।

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

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

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

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

মাল্টি-উইন্ডো সমর্থন নিষ্ক্রিয়

API লেভেল 24 থেকে 30 পর্যন্ত, আপনি যদি android:resizeableActivity="false" সেট করে মাল্টি-উইন্ডো সমর্থন অক্ষম করেন, তাহলে আপনার Android 7.0 থেকে 11 পর্যন্ত চলমান ডিভাইসে আপনার অ্যাপ চালু করা উচিত এবং অ্যাপটিকে স্প্লিট-স্ক্রিন এবং ডেস্কটপ উইন্ডোতে রাখার চেষ্টা করা উচিত। মোড যাচাই করুন যে আপনি যখন এটি করবেন, অ্যাপটি পূর্ণ-স্ক্রীন মোডে থাকে।

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

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

{% শব্দার্থে %} {% endverbatim %}

আপনার জন্য প্রস্তাবিত * দ্রষ্টব্য: জাভাস্ক্রিপ্ট বন্ধ থাকলে লিঙ্ক পাঠ্য প্রদর্শিত হয় * ডিভাইস সামঞ্জস্য মোড * বড় স্ক্রীনের পরিবর্তনযোগ্যতা সমর্থন * কনফিগারেশন পরিবর্তনগুলি পরিচালনা করুন

{% শব্দার্থে %}
{% endverbatim %}