জানালা ব্যবস্থাপনা

ChromeOS একাধিক উইন্ডোতে অ্যান্ড্রয়েড অ্যাপ সমর্থন করে। সিস্টেমটি অ্যাপগুলিকে উইন্ডো কন্টেইনারে রেন্ডার করে যার আকার ডিভাইসের ফর্ম ফ্যাক্টর দ্বারা নির্ধারিত হয়, যেমন চিত্র 1 এ দেখানো হয়েছে।

বিভিন্ন ডিভাইসে একটি অ্যাপ উইন্ডো।
চিত্র ১ : ক্যাপশনটি এখানে।

চিত্র ১. বিভিন্ন ডিভাইসে একটি অ্যাপ উইন্ডো।

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

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

প্রাথমিক উৎক্ষেপণের আকার

অ্যাপগুলি নিম্নলিখিত উপায়ে তাদের প্রাথমিক লঞ্চ আকারের জন্য অনুরোধ করতে পারে:

  • শুধুমাত্র ডেস্কটপ পরিবেশে লঞ্চ সাইজ ব্যবহার করুন। এটি উইন্ডো ম্যানেজারকে আপনাকে সঠিক সীমানা এবং ওরিয়েন্টেশন দিতে সাহায্য করে। ডেস্কটপ মোডে ব্যবহার করার সময় পছন্দগুলি নির্দেশ করতে, <activity> এর ভিতরে নিম্নলিখিত মেটা ট্যাগগুলি যোগ করুন:

    &lt;meta-data android:name=&#34;WindowManagerPreference:FreeformWindowSize&#34;
               android:value=&#34;[phone|tablet|maximize]&#34; /&gt;
    &lt;meta-data android:name=&#34;WindowManagerPreference:FreeformWindowOrientation&#34;
               android:value=&#34;[portrait|landscape]&#34; /&gt;
    
  • স্ট্যাটিক লঞ্চ বাউন্ড ব্যবহার করুন। আপনার কার্যকলাপের ম্যানিফেস্ট এন্ট্রির ভিতরে <layout> ব্যবহার করে একটি "স্থির" শুরুর আকার নির্দিষ্ট করুন, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:

    &lt;layout android:defaultHeight=&#34;500dp&#34;
                android:defaultWidth=&#34;600dp&#34;
                android:gravity=&#34;top|end&#34;
                android:minHeight=&#34;450dp&#34;
                android:minWidth=&#34;300dp&#34; /&gt;
    
  • গতিশীল লঞ্চ বাউন্ড ব্যবহার করুন। একটি অ্যাক্টিভিটি একটি নতুন অ্যাক্টিভিটি তৈরি করার সময় ActivityOptions.setLaunchBounds(Rect) তৈরি এবং ব্যবহার করতে পারে। একটি খালি আয়তক্ষেত্র নির্দিষ্ট করে, আপনার অ্যাপকে সর্বাধিক করা যেতে পারে।

উইন্ডোর আকার পরিবর্তন করুন

ChromeOS-এ, ব্যবহারকারীরা স্বাভাবিক উপায়ে একটি অ্যাপের উইন্ডোর আকার পরিবর্তন করতে পারেন: চিত্র ২-এ দেখানো নীচের ডান কোণটি টেনে এনে।

চিত্র ২ : ক্যাপশনটি এখানে।

চিত্র ২। একটি আকার পরিবর্তনযোগ্য অ্যাপ উইন্ডো।

View ক্লাস ব্যবহার করার সময় উইন্ডো রিসাইজিং পরিচালনা করার জন্য দুটি বিকল্প রয়েছে:

  • onConfigurationChanged(..) কল করে কনফিগারেশন পরিবর্তনের গতিশীল প্রতিক্রিয়া জানান। উদাহরণস্বরূপ, আপনি কার্যকলাপের ম্যানিফেস্টে android:configChanges="screenSize|smallestScreenSize|orientation|screenLayout" যোগ করতে পারেন। কনফিগারেশন পরিবর্তন পরিচালনা সম্পর্কে আরও তথ্যের জন্য, Handling configuration changes পড়ুন।
  • সিস্টেমটিকে কার্যকলাপটি পুনরায় চালু করতে দিন। এই ক্ষেত্রে, onSaveInstanceState প্রয়োগ করুন এবং পূর্ববর্তী সংরক্ষিত অবস্থা পুনরুদ্ধার করতে ViewModel আর্কিটেকচার উপাদান ব্যবহার করুন।

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

জানালার মাত্রা

আপনার কার্যক্রম শুরু হওয়ার সাথে সাথে তাদের জানালার মাত্রা পড়তে দিন এবং বর্তমান কনফিগারেশন অনুসারে তাদের বিষয়বস্তু সাজান।

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

মনে রাখবেন যে উইন্ডোর আকার এবং স্ক্রিনের আকার এক নয়। DP তে উইন্ডোর আকার পেতে, Activity.getResources().getConfiguration().screenWidth এবং Activity.getResources().getConfiguration().screenHeight ব্যবহার করুন। সম্ভবত আপনার কখনই স্ক্রিনের আকার ব্যবহার করার প্রয়োজন হবে না।

কন্টেন্টের সীমা

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

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

    • NativeActivity.mLastContent[X/Y/Width/Height]()
    • findViewById(android.R.id.content).get[Width/Height]()

    একজন পর্যবেক্ষক ব্যবহার করে ক্রমাগত পর্যবেক্ষণ করা যেতে পারে:

    • NativeActivity.onContentRectChangedNative()
    • NativeActivity.onGlobalLayout()
    • view.addOnLayoutChangeListener(findViewById(android.R.id.content)) তে একজন শ্রোতা যোগ করুন।

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

ফ্রি-ফর্ম রিসাইজিং

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

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

পূর্ণ পর্দা মোড

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

স্ক্রিন ওরিয়েন্টেশন

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

কিছু অ্যান্ড্রয়েড অ্যাপ ধরে নেয় যে যখন কোনও ডিভাইস পোর্ট্রেট মোডে রাখা হয়, তখন ঘূর্ণন মান Surface.ROTATION_0 হয়। এটি বেশিরভাগ অ্যান্ড্রয়েড ডিভাইসের ক্ষেত্রে সত্য হতে পারে। তবে, যখন অ্যাপটি একটি নির্দিষ্ট ARC মোডে থাকে, তখন পোর্ট্রেট ওরিয়েন্টেশনের জন্য ঘূর্ণন মান Surface.ROTATION_0 নাও হতে পারে।

অ্যাক্সিলোমিটার বা অনুরূপ সেন্সর পড়ার সময় সঠিক ঘূর্ণন মান পেতে, Display.getRotation() পদ্ধতিটি ব্যবহার করুন এবং সেই অনুযায়ী অক্ষটি অদলবদল করুন।

মূল কার্যকলাপ এবং অভিযোজন

একটি Chromebook উইন্ডোতে একগুচ্ছ অ্যাক্টিভিটি উইন্ডো থাকে। স্ট্যাকের প্রতিটি উইন্ডোর আকার এবং ওরিয়েন্টেশন একই রকম।

ডেস্কটপ পরিবেশে হঠাৎ ওরিয়েন্টেশন এবং আকার পরিবর্তন বিভ্রান্তিকর। Chromebook উইন্ডো ম্যানেজার এটিকে এমনভাবে এড়ায় যা অ্যান্ড্রয়েডের সাইড-বাই-সাইড মোডের মতো: স্ট্যাকের নীচের কার্যকলাপটি তার উপরের সমস্ত কার্যকলাপের বৈশিষ্ট্যগুলিকে নিয়ন্ত্রণ করে। এর ফলে অপ্রত্যাশিত পরিস্থিতির সৃষ্টি হতে পারে যেখানে একটি নতুন শুরু হওয়া কার্যকলাপ যা পোর্ট্রেট এবং আকার পরিবর্তনযোগ্য নয় তা ল্যান্ডস্কেপ এবং আকার পরিবর্তনযোগ্য হয়ে ওঠে।

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

ওরিয়েন্টেশন নির্দেশিকা

ওরিয়েন্টেশন পরিচালনার জন্য এই নির্দেশিকাগুলি অনুসরণ করুন:

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

অন্যান্য বিবেচ্য বিষয়

ChromeOS-এ অ্যান্ড্রয়েড অ্যাপের সাথে কাজ করার সময় এখানে আরও কিছু বিষয় বিবেচনা করতে হবে:

  • তোমার অ্যাক্টিভিটির onDestroy পদ্ধতিতে finish() কল করো না। এর ফলে অ্যাপটি resize করার সময় বন্ধ হয়ে যায় এবং পুনরায় চালু হয় না।
  • TYPE_KEYGUARD এবং TYPE_APPLICATION_MEDIA এর মতো অসঙ্গত উইন্ডো প্রকার ব্যবহার করবেন না।
  • পূর্বে বরাদ্দকৃত বস্তুগুলিকে ক্যাশে করে কার্যকলাপ দ্রুত পুনরায় চালু করুন।
  • যদি আপনি চান না যে ব্যবহারকারী আপনার অ্যাপের আকার পরিবর্তন করুক, তাহলে আপনার ম্যানিফেস্ট ফাইলে android:resizeableActivity=false উল্লেখ করুন।
  • আপনার অ্যাপটি পরীক্ষা করে দেখুন যে এটি উইন্ডোর আকারের পরিবর্তনগুলি যথাযথভাবে পরিচালনা করে।