মাল্টি-উইন্ডো মোড একই সাথে একই স্ক্রিন শেয়ার করতে একাধিক অ্যাপকে সক্ষম করে। অ্যাপ্লিকেশানগুলি পাশাপাশি থাকতে পারে বা অন্যটির উপরে (বিভক্ত-স্ক্রিন মোড), একটি ছোট উইন্ডোতে একটি অ্যাপ অন্য অ্যাপগুলিকে (ছবি-মধ্য-ছবি মোড) ওভারলে করে, বা পৃথক চলমান, আকার পরিবর্তনযোগ্য উইন্ডোতে (ডেস্কটপ উইন্ডো মোড) .
ফোনে স্প্লিট-স্ক্রিন মোড অ্যাক্সেস করার বিষয়ে ব্যবহারকারীর নির্দেশাবলীর জন্য, Pixel ফোনে একই সময়ে দুটি অ্যাপ দেখুন এ যান।
সংস্করণ-নির্দিষ্ট মাল্টি-উইন্ডো বৈশিষ্ট্য
মাল্টি-উইন্ডো ব্যবহারকারীর অভিজ্ঞতা Android এর সংস্করণ এবং ডিভাইসের ধরনের উপর নির্ভর করে:
Android 7.0 (API লেভেল 24) ছোট স্ক্রীন ডিভাইসে স্প্লিট-স্ক্রিন মোড এবং নির্বাচিত ডিভাইসে পিকচার-ইন-পিকচার মোড চালু করেছে।
স্প্লিট-স্ক্রিন মোড দুটি অ্যাপ দিয়ে স্ক্রীনকে পূর্ণ করে, সেগুলিকে পাশাপাশি বা অন্যটির উপরে দেখায়। ব্যবহারকারীরা একটি অ্যাপকে বড় এবং অন্যটিকে ছোট করতে দুটি অ্যাপকে আলাদা করে বিভাজকটি টেনে আনতে পারেন।
পিকচার-ইন-পিকচার মোড ব্যবহারকারীদের অন্য অ্যাপের সাথে ইন্টারঅ্যাক্ট করার সময় ভিডিও প্লেব্যাক চালিয়ে যেতে সক্ষম করে ( পিকচার-ইন-পিকচার সাপোর্ট দেখুন)।
ডেস্কটপ উইন্ডোজিং মোড , যেখানে ব্যবহারকারীরা স্বাধীনভাবে প্রতিটি ক্রিয়াকলাপের আকার পরিবর্তন করতে পারে, বড় পর্দার ডিভাইসগুলির নির্মাতারা সক্ষম করতে পারেন৷
আপনার অ্যাপ্লিকেশানটি কীভাবে মাল্টি-উইন্ডো মোড পরিচালনা করে তা আপনি আপনার কার্যকলাপের ন্যূনতম অনুমোদিত মাত্রাগুলি নির্দিষ্ট করে কনফিগার করতে পারেন৷ সিস্টেমটি সর্বদা আপনার অ্যাপকে পূর্ণ স্ক্রীন দেখায় তা নিশ্চিত করতে আপনি
resizeableActivity="false"
সেট করে আপনার অ্যাপের জন্য মাল্টি-উইন্ডো মোড অক্ষম করতে পারেন।
অ্যান্ড্রয়েড 8.0 (API লেভেল 26) পিকচার-ইন-পিকচার মোডকে ছোট পর্দার ডিভাইসে প্রসারিত করে।
Android 12 (API লেভেল 31) মাল্টি-উইন্ডো মোড স্ট্যান্ডার্ড আচরণ করে।
বড় স্ক্রিনে ( মাঝারি বা প্রসারিত উইন্ডো সাইজ ক্লাস), প্ল্যাটফর্মটি অ্যাপ কনফিগারেশন নির্বিশেষে মাল্টি-উইন্ডো মোডে সমস্ত অ্যাপ সমর্থন করে।
resizeableActivity="false"
হলে, ডিসপ্লের মাত্রা মিটমাট করার জন্য অ্যাপটিকে সামঞ্জস্যপূর্ণ মোডে রাখা হয়।ছোট স্ক্রিনে ( কমপ্যাক্ট উইন্ডো সাইজ ক্লাস), অ্যাক্টিভিটি মাল্টি-উইন্ডো মোডে চলতে পারে কিনা তা নির্ধারণ করতে সিস্টেমটি একটি অ্যাক্টিভিটির
minWidth
এবংminHeight
চেক করে।resizeableActivity="false"
হলে, ন্যূনতম প্রস্থ এবং উচ্চতা নির্বিশেষে অ্যাপটিকে মাল্টি-উইন্ডো মোডে চলতে বাধা দেওয়া হয়।
স্প্লিট-স্ক্রিন মোড
ব্যবহারকারীরা নিম্নলিখিতগুলি করে স্প্লিট-স্ক্রিন মোড সক্রিয় করে:
- সাম্প্রতিক স্ক্রীন খুলুন
- দেখার জন্য একটি অ্যাপ সোয়াইপ করুন
- অ্যাপ শিরোনাম বারে অ্যাপ আইকন টিপুন
- স্প্লিট স্ক্রিন মেনু বিকল্পটি নির্বাচন করুন
- সাম্প্রতিক স্ক্রীন থেকে অন্য একটি অ্যাপ্লিকেশন নির্বাচন করুন, অথবা সাম্প্রতিক স্ক্রীনটি বন্ধ করুন এবং অন্য একটি অ্যাপ্লিকেশন চালান৷
ব্যবহারকারীরা স্প্লিট-স্ক্রিন মোড থেকে প্রস্থান করে উইন্ডো ডিভাইডারটিকে স্ক্রীনের প্রান্তে টেনে-উপরে বা নিচে, বাম বা ডানে।
সংলগ্ন লঞ্চ
আপনার অ্যাপ্লিকেশানের যদি কোনো অভিপ্রায়ের মাধ্যমে বিষয়বস্তু অ্যাক্সেস করার প্রয়োজন হয়, তাহলে আপনি 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) } }
জাভা
public void openUrlInAdjacentWindow(String url) { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse(url)); intent.addFlags(Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT | Intent.FLAG_ACTIVITY_NEW_TASK); 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. } }
জাভা
@Override public void onTopResumedActivityChanged(boolean topResumed) { 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
এক্সক্লুসিভ ক্যামেরা অ্যাক্সেসের গ্যারান্টি নয়, যেহেতু ক্যামেরা ব্যবহার করে এমন অন্যান্য অ্যাপগুলি অন্য ডিসপ্লেতে খোলা যেতে পারে।
যখন অ্যাপটি ফোকাস হারায় তখন আপনার অ্যাপটিকে ক্যামেরা ছেড়ে দিতে হবে না। উদাহরণস্বরূপ, ব্যবহারকারী নতুন ফোকাস করা শীর্ষস্থানীয় পুনঃসূচনা অ্যাপের সাথে ইন্টারঅ্যাক্ট করার সময় আপনি ক্যামেরা প্রিভিউ চালিয়ে যেতে চাইতে পারেন। আপনার অ্যাপের জন্য ক্যামেরা চালানোর জন্য এটি ঠিক আছে যখন এটি শীর্ষস্থানীয় পুনরায় শুরু করা অ্যাপ নয়, তবে এটি সংযোগ বিচ্ছিন্ন কেসটি সঠিকভাবে পরিচালনা করতে হবে। যখন শীর্ষস্থানীয় পুনরায় শুরু করা অ্যাপটি ক্যামেরা ব্যবহার করতে চায়, তখন এটি এটি খুলতে পারে এবং আপনার অ্যাপটি অ্যাক্সেস হারাবে। যখন অ্যাপটি ফোকাস ফিরে পায় তখন আপনার অ্যাপ ক্যামেরা আবার খুলতে পারে।
একটি অ্যাপ একটি CameraDevice.StateCallback#onDisconnected()
কলব্যাক পাওয়ার পরে, ক্যামেরা ডিভাইসে পরবর্তী কলগুলি একটি CameraAccessException
নিক্ষেপ করবে৷
মাল্টি-ডিসপ্লে
Android 10 (API লেভেল 29) সেকেন্ডারি ডিসপ্লেতে ক্রিয়াকলাপ সমর্থন করে। একাধিক ডিসপ্লে সহ একটি ডিভাইসে কোনো অ্যাক্টিভিটি চলমান থাকলে, ব্যবহারকারীরা অ্যাক্টিভিটিটিকে এক ডিসপ্লে থেকে অন্য ডিসপ্লেতে নিয়ে যেতে পারেন। মাল্টি-রিজুমে মাল্টি-স্ক্রিন পরিস্থিতিতেও প্রযোজ্য; একই সময়ে বেশ কয়েকটি ক্রিয়াকলাপ ব্যবহারকারীর ইনপুট গ্রহণ করতে পারে।
একটি অ্যাপ নির্দিষ্ট করতে পারে যে কোন ডিসপ্লেতে এটি চালু হবে বা কখন এটি অন্য কার্যকলাপ তৈরি করবে। এই আচরণটি ম্যানিফেস্ট ফাইলে সংজ্ঞায়িত অ্যাক্টিভিটি লঞ্চ মোড এবং অ্যাক্টিভিটি চালুকারী সত্তা দ্বারা সেট করা অভিপ্রায় ফ্ল্যাগ এবং বিকল্পগুলির উপর নির্ভর করে। আরো বিস্তারিত জানার জন্য ActivityOptions
ক্লাস দেখুন।
যখন একটি ক্রিয়াকলাপ একটি সেকেন্ডারি ডিসপ্লেতে চলে যায়, তখন এটি একটি প্রসঙ্গ আপডেট, উইন্ডোর আকার পরিবর্তন এবং কনফিগারেশন এবং সংস্থান পরিবর্তনের মধ্য দিয়ে যেতে পারে। যদি কার্যকলাপটি কনফিগারেশন পরিবর্তন পরিচালনা করে, তবে কার্যকলাপটি onConfigurationChanged()
এ অবহিত করা হয়; অন্যথায়, কার্যকলাপ পুনরায় চালু করা হয়.
কনফিগারেশন পরিবর্তন পরিচালনা করলে একটি কার্যকলাপের বর্তমান প্রদর্শন onCreate()
এবং onConfigurationChanged()
পরীক্ষা করা উচিত। ডিসপ্লে পরিবর্তন হলে রিসোর্স এবং লেআউট আপডেট করা নিশ্চিত করুন।
যদি একটি কার্যকলাপের জন্য নির্বাচিত লঞ্চ মোড একাধিক দৃষ্টান্তের অনুমতি দেয়, একটি সেকেন্ডারি স্ক্রিনে লঞ্চ করা কার্যকলাপের একটি নতুন উদাহরণ তৈরি করতে পারে। উভয় কার্যক্রম একই সময়ে পুনরায় শুরু হয়।
আপনি Android 8.0-এ প্রবর্তিত মাল্টি-ডিসপ্লে API সম্পর্কেও পড়তে চাইতে পারেন।
কার্যকলাপ বনাম আবেদন প্রসঙ্গ
মাল্টি-ডিসপ্লেতে সঠিক প্রসঙ্গ ব্যবহার করা অত্যন্ত গুরুত্বপূর্ণ। সংস্থানগুলি অ্যাক্সেস করার সময়, কার্যকলাপের প্রসঙ্গ (যা প্রদর্শিত হয়) অ্যাপ্লিকেশন প্রসঙ্গ (যা নয়) থেকে আলাদা।
অ্যাক্টিভিটি কনটেক্সট ডিসপ্লে সম্পর্কে তথ্য ধারণ করে এবং যে ডিসপ্লে এলাকায় অ্যাক্টিভিটি দেখা যায় তার জন্য সবসময় অ্যাডজাস্ট করা হয়। এটি আপনাকে আপনার অ্যাপের প্রদর্শনের ঘনত্ব বা উইন্ডো মেট্রিক্স সম্পর্কে সঠিক তথ্য পেতে সক্ষম করে। বর্তমান উইন্ডো বা প্রদর্শন সম্পর্কে তথ্য পেতে আপনার সর্বদা কার্যকলাপ প্রসঙ্গ (বা অন্য UI-ভিত্তিক প্রসঙ্গ) ব্যবহার করা উচিত। এটি কিছু সিস্টেম API-কেও প্রভাবিত করে যা প্রসঙ্গ থেকে তথ্য ব্যবহার করে (উদাহরণস্বরূপ, টোস্ট ওভারভিউ দেখুন)।
অ্যাক্টিভিটি উইন্ডো কনফিগারেশন এবং প্যারেন্ট ডিসপ্লে সম্পদ এবং প্রসঙ্গ সংজ্ঞায়িত করে। নিম্নরূপ বর্তমান প্রদর্শন পান:
কোটলিন
val activityDisplay = activity.getDisplay()
জাভা
Display activityDisplay = activity.getDisplay();
বর্তমান কার্যকলাপ উইন্ডো মেট্রিক্স পান:
কোটলিন
val windowMetrics = activity.getWindowManager().getCurrentWindowMetrics()
জাভা
WindowMetrics windowMetrics = activity.getWindowManager().getCurrentWindowMetrics();
বর্তমান সিস্টেম কনফিগারেশনের জন্য সর্বাধিক উইন্ডো মেট্রিক্স পান:
কোটলিন
val maximumWindowMetrics = activity.getWindowManager().getMaximumWindowMetrics()
জাভা
WindowMetrics maximumWindowMetrics = activity.getWindowManager().getMaximumWindowMetrics();
সর্বাধিক উইন্ডো মেট্রিক্স হল গণনা করা, লেআউট পছন্দ করা, বা সময়ের আগে সংগ্রহ করার জন্য সম্পদের আকার নির্ধারণ করা। onCreate()
এ এটি উপলব্ধ থাকার ফলে আপনি প্রথম লেআউট পাসের আগে এই সিদ্ধান্তগুলি নিতে পারবেন। এই মেট্রিকগুলি নির্দিষ্ট ভিউ উপাদানগুলি সাজানোর জন্য ব্যবহার করা উচিত নয়; পরিবর্তে Configuration
অবজেক্ট থেকে তথ্য ব্যবহার করুন।
কাটআউট প্রদর্শন করুন
ভাঁজযোগ্য ডিভাইসগুলির ভাঁজ করা এবং খোলার সময় আলাদা কাটআউট জ্যামিতি থাকতে পারে। কাটআউট সমস্যা এড়াতে, সাপোর্ট ডিসপ্লে কাটআউট দেখুন।
সেকেন্ডারি ডিসপ্লে
আপনি DisplayManager
সিস্টেম পরিষেবা থেকে উপলব্ধ প্রদর্শনগুলি পেতে পারেন:
কোটলিন
val displayManager = getSystemService(Context.DISPLAY_SERVICE) as DisplayManager val displays = displayManager.getDisplays()
জাভা
DisplayManager displayManager = (DisplayManager) getSystemService(Context.DISPLAY_SERVICE); Display[] displays = displayManager.getDisplays();
একটি নির্দিষ্ট ডিসপ্লে সম্পর্কে তথ্য পেতে Display
ক্লাস ব্যবহার করুন, যেমন ডিসপ্লে সাইজ বা পতাকা যা নির্দেশ করে যে ডিসপ্লে সুরক্ষিত কিনা। যাইহোক, অনুমান করবেন না যে ডিসপ্লের আকার আপনার অ্যাপ্লিকেশনে বরাদ্দ করা ডিসপ্লে এলাকার মতোই হতে চলেছে। মনে রাখবেন যে মাল্টি-উইন্ডো মোডে, আপনার অ্যাপ্লিকেশনটি প্রদর্শনের একটি অংশ দখল করে।
একটি ডিসপ্লেতে একটি কার্যকলাপ চালু করতে পারে কিনা তা নির্ধারণ করুন:
কোটলিন
val activityManager = getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager val activityAllowed = activityManager.isActivityStartAllowedOnDisplay(context, displayId, intent)
জাভা
ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); boolean activityAllowed = activityManager.isActivityStartAllowedOnDisplay(context, displayId, intent);
তারপর ডিসপ্লেতে কার্যকলাপ চালু করুন:
কোটলিন
val options = ActivityOptions.makeBasic() options.setLaunchDisplayId(targetDisplay.displayId) startActivity(intent, options.toBundle())
জাভা
ActivityOptions options = ActivityOptions.makeBasic(); options.setLaunchDisplayId(targetDisplay.displayId); startActivity(intent, options.toBundle());
মাল্টি-ডিসপ্লে সমর্থন
Android সফ্টওয়্যার কীবোর্ড, ওয়ালপেপার এবং লঞ্চারগুলির জন্য মাল্টি-ডিসপ্লে সমর্থন প্রদান করে৷
সফটওয়্যার কীবোর্ড
একটি কীবোর্ড একটি সেকেন্ডারি স্ক্রিনে দেখানো যেতে পারে যদি ডিসপ্লেটি সিস্টেম সজ্জা সমর্থন করার জন্য কনফিগার করা থাকে। ইনপুট পদ্ধতি সম্পাদক স্বয়ংক্রিয়ভাবে প্রদর্শিত হয় যদি একটি পাঠ্য ক্ষেত্র সেই প্রদর্শনে ইনপুট অনুরোধ করে।
ওয়ালপেপার
অ্যান্ড্রয়েড 10 (এপিআই লেভেল 29), সেকেন্ডারি স্ক্রিনে ওয়ালপেপার থাকতে পারে। ফ্রেমওয়ার্ক প্রতিটি প্রদর্শনের জন্য WallpaperService.Engine
এর একটি পৃথক উদাহরণ তৈরি করে। নিশ্চিত করুন যে প্রতিটি ইঞ্জিনের পৃষ্ঠটি স্বাধীনভাবে আঁকা হয়েছে। বিকাশকারীরা WallpaperService.Engine#getDisplayContext()
এ প্রদর্শনের প্রসঙ্গ ব্যবহার করে সম্পদ লোড করতে পারে। এছাড়াও, নিশ্চিত করুন যে আপনার WallpaperInfo.xml
ফাইলটি android:supportsMultipleDisplays="true"
সেট করেছে।
লঞ্চার
একটি নতুন অভিপ্রায় ফিল্টার বিভাগ, SECONDARY_HOME
, সেকেন্ডারি স্ক্রিনের জন্য একটি উত্সর্গীকৃত কার্যকলাপ প্রদান করে৷ কার্যকলাপের দৃষ্টান্তগুলি সমস্ত ডিসপ্লেতে ব্যবহৃত হয় যা সিস্টেম সজ্জাকে সমর্থন করে, প্রতি ডিসপ্লেতে একটি করে।
<activity>
...
<intent-filter>
<category android:name="android.intent.category.SECONDARY_HOME" />
...
</intent-filter>
</activity>
ক্রিয়াকলাপের একটি লঞ্চ মোড থাকতে হবে যা একাধিক দৃষ্টান্ত প্রতিরোধ করে না এবং এটি বিভিন্ন স্ক্রীন আকারের সাথে মানিয়ে নিতে পারে। লঞ্চ মোড singleInstance
বা singleTask
হতে পারে না।
উদাহরণস্বরূপ, Launcher3
এর AOSP বাস্তবায়ন একটি SECONDARY_HOME
কার্যকলাপকে সমর্থন করে।
উইন্ডো মেট্রিক্স
অ্যান্ড্রয়েড 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
জাভা
WindowMetrics windowMetrics = context.createDisplayContext(display) .createWindowContext(WindowManager.LayoutParams.TYPE_APPLICATION, null) .getSystemService(WindowManager.class) .getMaximumWindowMetrics();
অপ্রচলিত পদ্ধতি
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
পতাকা দিয়ে নতুন কার্যকলাপ শুরু করুন৷ আপনি নতুন উইন্ডোর জন্য একটি নির্দিষ্ট অবস্থানের অনুরোধ করতে মাল্টি-উইন্ডো বৈশিষ্ট্যগুলির সাথে এই সেটিংটি একত্রিত করতে পারেন। উদাহরণস্বরূপ, একটি শপিং অ্যাপ পণ্যের তুলনা করতে একাধিক সংলগ্ন উইন্ডো প্রদর্শন করতে পারে।
Android 12 (API লেভেল 31) এবং উচ্চতর আপনাকে অ্যাক্টিভিটি এমবেডিং -এ একই টাস্ক উইন্ডোতে পাশাপাশি অ্যাক্টিভিটির দুটি দৃষ্টান্ত চালু করতে সক্ষম করে।
আপনি যদি ব্যবহারকারীদের অ্যাপ্লিকেশন লঞ্চার বা টাস্কবার থেকে আপনার অ্যাপ্লিকেশনের অন্য একটি উদাহরণ শুরু করার অনুমতি দিতে চান, তাহলে আপনার লঞ্চার কার্যকলাপের ম্যানিফেস্টে android:resizeableActivity="true"
সেট করুন এবং একাধিক দৃষ্টান্ত প্রতিরোধ করে এমন একটি লঞ্চ মোড ব্যবহার করবেন না। উদাহরণস্বরূপ, যখন FLAG_ACTIVITY_MULTIPLE_TASK
বা FLAG_ACTIVITY_NEW_DOCUMENT
সেট করা থাকে তখন একটি singleInstancePerTask
অ্যাক্টিভিটি বিভিন্ন টাস্কে একাধিকবার ইনস্ট্যান্ট করা যেতে পারে।
Android 15 (API স্তর 35) এবং উচ্চতর, PROPERTY_SUPPORTS_MULTI_INSTANCE_SYSTEM_UI
আপনাকে বহু-উদাহরণে সমর্থন ঘোষণা করতে সক্ষম করে৷ বৈশিষ্ট্যটি সিস্টেম UI-এর জন্য একটি সুস্পষ্ট সংকেত যা ব্যবহারকারীর কাছে অ্যাপের একাধিক দৃষ্টান্ত তৈরি করতে নিয়ন্ত্রণ প্রকাশ করতে পারে। প্রপার্টিটি লঞ্চ মোড থেকে স্বাধীন কিন্তু শুধুমাত্র তখনই ব্যবহার করা উচিত যখন কোনো অ্যাক্টিভিটি বা অ্যাপ্লিকেশানের লঞ্চ মোড প্রপার্টির সাথে সামঞ্জস্যপূর্ণ, উদাহরণস্বরূপ, যখন লঞ্চ মোড singleInstance
না হয়।
যখন একটি ভাঁজযোগ্য ডিভাইসে একটি অ্যাপের একাধিক দৃষ্টান্ত পৃথক উইন্ডোতে চলছে, তখন ডিভাইসের ভঙ্গি পরিবর্তন হলে এক বা একাধিক উদাহরণ পটভূমিতে পাঠানো হতে পারে। উদাহরণস্বরূপ, অনুমান করুন একটি ডিভাইস খোলা হয়েছে এবং ভাঁজের প্রতিটি পাশে পৃথক উইন্ডোতে দুটি অ্যাপের দৃষ্টান্ত চলছে৷ ডিভাইসটি ভাঁজ করা থাকলে, ছোট পর্দায় উভয় দৃষ্টান্তের জন্য উইন্ডোজ ফিট করার চেষ্টা করার পরিবর্তে একটি উদাহরণ বন্ধ হয়ে যেতে পারে।
মাল্টি-উইন্ডো মোড যাচাইকরণ
আপনার অ্যাপটি এপিআই লেভেল 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 পর্যন্ত চলমান ডিভাইসে আপনার অ্যাপ চালু করা উচিত এবং অ্যাপটিকে স্প্লিট-স্ক্রিন এবং ডেস্কটপ উইন্ডোতে রাখার চেষ্টা করা উচিত। মোড যাচাই করুন যে আপনি যখন এটি করবেন, অ্যাপটি পূর্ণ-স্ক্রীন মোডে থাকে।
অতিরিক্ত সম্পদ
অ্যান্ড্রয়েডে মাল্টি-উইন্ডো সমর্থন সম্পর্কে আরও তথ্যের জন্য, দেখুন:
- অ্যান্ড্রয়েড মাল্টিউইন্ডোপ্লেগ্রাউন্ডের নমুনা
আপনার জন্য প্রস্তাবিত * দ্রষ্টব্য: জাভাস্ক্রিপ্ট বন্ধ থাকলে লিঙ্ক পাঠ্য প্রদর্শিত হয় * ডিভাইস সামঞ্জস্য মোড * বড় স্ক্রীনের পরিবর্তনযোগ্যতা সমর্থন * কনফিগারেশন পরিবর্তনগুলি পরিচালনা করুন
{% শব্দার্থে %}