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

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

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

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

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

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

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

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

উপাদান

  • screenOrientation: অ্যাপ ম্যানিফেস্ট সেটিং যা আপনাকে নির্দিষ্ট করতে দেয় যে ডিভাইসের ওরিয়েন্টেশন পরিবর্তন হলে আপনার অ্যাপ কীভাবে প্রতিক্রিয়া জানাবে
  • Activity#setRequestedOrientation(): রানটাইমে অ্যাপের অরিয়েন্টেশন পরিবর্তন করার পদ্ধতি
  • LocalConfiguration: কম্পোজ করা যায় এমন লোকাল প্রোভাইডার যা বর্তমান ডিভাইস Configuration দেখায়, এর ফলে আপনি DP-তে স্ক্রিনের ডাইমেনশন পড়তে পারেন।
  • 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 থেকে DP-তে বর্তমান স্ক্রিনের ডাইমেনশন রিঅ্যাক্টিভভাবে পড়তে এবং কনফিগারেশন পরিবর্তন হলে অ্যাক্টিভিটির ওরিয়েন্টেশন আপডেট করতে 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) ব্লকের মধ্যে লজিক যোগ করে, আপনি অ্যাপ কনফিগারেশন পরিবর্তিত হলে, যেমন অ্যাক্টিভিটির সাইজ পরিবর্তন করা হলে, ডিসপ্লে পরিবর্তন করা হলে অথবা কোনও ফোল্ড করা যায় এমন ডিভাইস ফোল্ড বা আনফোল্ড করা হলে, ওরিয়েন্টেশন সেটিংকে রিঅ্যাক্টিভভাবে ওভাররাইড করতে পারবেন।

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

ফলাফল

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

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

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