ফোনে অ্যাপের ওরিয়েন্টেশন সীমাবদ্ধ থাকলেও বড় স্ক্রিনে তা থাকে না

দুটি স্টার রেটিং আইকন

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

আপনি কীভাবে দুটি কাজই করতে পারেন—ছোট স্ক্রিনে অ্যাপটিকে পোর্ট্রেট ওরিয়েন্টেশনে সীমাবদ্ধ করা, কিন্তু বড় স্ক্রিনে ল্যান্ডস্কেপ চালু করা?

পেশাদার পদ্ধতি

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

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

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

উপাদান

  • screenOrientation: অ্যাপ ম্যানিফেস্ট সেটিং যা আপনাকে নির্দিষ্ট করতে দেয় ডিভাইসের ওরিয়েন্টেশন পরিবর্তন হলে আপনার অ্যাপ কীভাবে রেসপন্স করবে
  • Activity#setRequestedOrientation(): রানটাইমে অ্যাপের ওরিয়েন্টেশন পরিবর্তন করার পদ্ধতি
  • LocalConfiguration: কম্পোজেবল লোকাল প্রোভাইডার যা বর্তমান ডিভাইস Configuration প্রকাশ করে, আপনাকে ডিপি-তে স্ক্রিনের ডাইমেনশন পড়তে দেয়।
  • LaunchedEffect: কম্পোজ সাইড-এফেক্ট API যা কোনও কী পরিবর্তন হলে (এই ক্ষেত্রে, কনফিগারেশন পরিবর্তন হলে) কোডের একটি ব্লক রান করে।

ধাপ

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

১. অ্যাপ ম্যানিফেস্টে ওরিয়েন্টেশন সেটিং উল্লেখ করুন

আপনি অ্যাপ ম্যানিফেস্টের screenOrientation এলিমেন্ট ঘোষণা করা এড়িয়ে যেতে পারেন (যেক্ষেত্রে ওরিয়েন্টেশন ডিফল্ট হিসেবে unspecified-এ সেট করা থাকে) অথবা স্ক্রিন ওরিয়েন্টেশন fullUser-এ সেট করতে পারেন। ব্যবহারকারী সেন্সর-ভিত্তিক রোটেশন লক না করলে, আপনার অ্যাপ সব ডিভাইস ওরিয়েন্টেশন সাপোর্ট করবে।

<activity
    android:name=".MyActivity"
    android:screenOrientation="fullUser">

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

২. Compose-এ ডায়নামিকভাবে ওরিয়েন্টেশন সীমাবদ্ধ করা

Jetpack Compose-এ, আপনি LocalConfiguration.current থেকে ডিপি-তে বর্তমান স্ক্রিনের ডাইমেনশন রিঅ্যাক্টিভভাবে পড়তে পারেন এবং কনফিগারেশন পরিবর্তন হলে অ্যাক্টিভিটির ওরিয়েন্টেশন আপডেট করতে LaunchedEffect ব্যবহার করতে পারেন।

স্ক্রিনের প্রস্থ বা উচ্চতা 600dp-এর কম হলে (ফোনের জন্য কম্প্যাক্ট ব্রেকপয়েন্টের সাথে সম্পর্কিত), ওরিয়েন্টেশন পোর্ট্রেটে সীমাবদ্ধ করুন। অন্যথায়, ব্যবহারকারীর পছন্দ (unspecified বা fullUser) অনুযায়ী সিস্টেমকে অ্যাপ রোটেট করার অনুমতি দিন।

এখানে সম্পূর্ণ, কম্পাইল করা যায় এমন ইমপ্লিমেন্টেশন দেওয়া হল:

val configuration = LocalConfiguration.current
val context = LocalActivity.current

LaunchedEffect(configuration) {
    val activity = context ?: return@LaunchedEffect
    // Determine if screen is compact (phone-sized) in either width or height
    val isCompact = configuration.screenWidthDp < 600 || configuration.screenHeightDp < 600
    activity.requestedOrientation = if (isCompact) {
        ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
    } else {
        ActivityInfo.SCREEN_ORIENTATION_FULL_USER
    }
}

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

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

ফলাফল

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

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

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