আপনার অ্যাপটি পোর্ট্রেট অভিযোজনে ফোনে দুর্দান্ত কাজ করে, তাই আপনি অ্যাপটিকে শুধুমাত্র প্রতিকৃতিতে সীমাবদ্ধ রেখেছেন। কিন্তু আপনি ল্যান্ডস্কেপ ওরিয়েন্টেশনে বড় পর্দায় আরও কিছু করার সুযোগ দেখতে পাচ্ছেন।
আপনি কীভাবে এটি উভয় উপায়ে পেতে পারেন—অ্যাপটিকে ছোট স্ক্রিনে প্রতিকৃতির অভিযোজনে সীমাবদ্ধ করুন, কিন্তু বড় পর্দায় ল্যান্ডস্কেপ সক্ষম করুন?
এই নির্দেশিকাটি একটি অস্থায়ী পরিমাপ যতক্ষণ না আপনি সমস্ত ডিভাইস কনফিগারেশনের জন্য সম্পূর্ণ সমর্থন প্রদানের জন্য আপনার অ্যাপটিকে উন্নত করতে পারেন৷
অ্যাপ ওরিয়েন্টেশন পরিচালনা করুন
বড় স্ক্রিনে ল্যান্ডস্কেপ ওরিয়েন্টেশন সক্ষম করতে, ডিফল্টরূপে ওরিয়েন্টেশন পরিবর্তনগুলি পরিচালনা করতে আপনার অ্যাপ ম্যানিফেস্ট সেট করুন। রানটাইমে, অ্যাপ উইন্ডোর আকার নির্ধারণ করুন। অ্যাপ উইন্ডোটি ছোট হলে, ম্যানিফেস্ট ওরিয়েন্টেশন সেটিং ওভাররাইড করে অ্যাপের অভিযোজন সীমাবদ্ধ করুন।
1. অ্যাপ ম্যানিফেস্টে ওরিয়েন্টেশন সেটিং নির্দিষ্ট করুন
আপনি হয় অ্যাপ ম্যানিফেস্টের screenOrientation
উপাদান ঘোষণা করা এড়াতে পারেন (যে ক্ষেত্রে ওরিয়েন্টেশন unspecified
থেকে ডিফল্ট হয়) অথবা স্ক্রিন ওরিয়েন্টেশনকে fullUser
এ সেট করতে পারেন। ব্যবহারকারী যদি সেন্সর-ভিত্তিক ঘূর্ণন লক না করে থাকে, তাহলে আপনার অ্যাপটি সমস্ত ডিভাইসের অভিযোজন সমর্থন করবে।
<activity
android:name=".MyActivity"
android:screenOrientation="fullUser">
unspecified
এবং fullUser
মধ্যে পার্থক্য সূক্ষ্ম কিন্তু গুরুত্বপূর্ণ। আপনি যদি একটি screenOrientation
মান ঘোষণা না করেন, তাহলে সিস্টেমটি ওরিয়েন্টেশন বেছে নেয়, এবং সিস্টেম যে নীতিটি ব্যবহার করে ওরিয়েন্টেশন নির্ধারণ করতে তা ডিভাইস থেকে ডিভাইসে আলাদা হতে পারে। অন্যদিকে, fullUser
নির্দিষ্ট করা ডিভাইসটির জন্য ব্যবহারকারীর সংজ্ঞায়িত আচরণের সাথে আরও ঘনিষ্ঠভাবে মেলে: ব্যবহারকারী যদি সেন্সর-ভিত্তিক ঘূর্ণন লক করে থাকে, অ্যাপটি ব্যবহারকারীর পছন্দ অনুসরণ করে; অন্যথায়, সিস্টেমটি চারটি সম্ভাব্য স্ক্রীন অভিযোজনের যেকোনো একটিকে অনুমতি দেয় (পোর্ট্রেট, ল্যান্ডস্কেপ, বিপরীত প্রতিকৃতি, বা বিপরীত ল্যান্ডস্কেপ)। screenOrientation
দেখুন।
2. পর্দার আকার নির্ধারণ করুন
সমস্ত ব্যবহারকারী-অনুমোদিত অভিযোজন সমর্থন করার জন্য ম্যানিফেস্ট সেটের সাথে, আপনি স্ক্রীনের আকারের উপর ভিত্তি করে প্রোগ্রামগতভাবে অ্যাপ্লিকেশন অভিযোজন নির্দিষ্ট করতে পারেন৷
মডিউলের build.gradle
বা build.gradle.kts
ফাইলে Jetpack WindowManager লাইব্রেরি যোগ করুন:
কোটলিন
implementation("androidx.window:window:version
") implementation("androidx.window:window-core:version
")
গ্রোভি
implementation 'androidx.window:window:version
' implementation 'androidx.window:window-core:version
'
একটি WindowMetrics
অবজেক্ট হিসাবে ডিভাইসের পর্দার আকার পেতে Jetpack WindowManager WindowMetricsCalculator#computeMaximumWindowMetrics()
পদ্ধতি ব্যবহার করুন। কখন অভিযোজন সীমাবদ্ধ করতে হবে তা নির্ধারণ করতে উইন্ডোর মেট্রিকগুলিকে উইন্ডো আকারের ক্লাসের সাথে তুলনা করা যেতে পারে।
উইন্ডোজ আকারের ক্লাস ছোট এবং বড় পর্দার মধ্যে ব্রেকপয়েন্ট প্রদান করে।
পর্দার আকার নির্ধারণ করতে WindowWidthSizeClass#COMPACT
এবং WindowHeightSizeClass#COMPACT
ব্রেকপয়েন্ট ব্যবহার করুন:
কোটলিন
/** Determines whether the device has a compact screen. **/ fun compactScreen() : Boolean { val metrics = WindowMetricsCalculator.getOrCreate().computeMaximumWindowMetrics(this) val width = metrics.bounds.width() val height = metrics.bounds.height() val density = resources.displayMetrics.density val windowSizeClass = WindowSizeClass.compute(width/density, height/density) return windowSizeClass.windowWidthSizeClass == WindowWidthSizeClass.COMPACT || windowSizeClass.windowHeightSizeClass == WindowHeightSizeClass.COMPACT }
জাভা
/** Determines whether the device has a compact screen. **/ private boolean compactScreen() { WindowMetrics metrics = WindowMetricsCalculator.getOrCreate().computeMaximumWindowMetrics(this); int width = metrics.getBounds().width(); int height = metrics.getBounds().height(); float density = getResources().getDisplayMetrics().density; WindowSizeClass windowSizeClass = WindowSizeClass.compute(width/density, height/density); return windowSizeClass.getWindowWidthSizeClass() == WindowWidthSizeClass.COMPACT || windowSizeClass.getWindowHeightSizeClass() == WindowHeightSizeClass.COMPACT; }
- দ্রষ্টব্য:
- উদাহরণগুলি একটি কার্যকলাপের পদ্ধতি হিসাবে প্রয়োগ করা হয়; এবং তাই,
computeMaximumWindowMetrics()
এর আর্গুমেন্টে কার্যকলাপটিকেthis
হিসাবে ডিরেফারেন্স করা হয়েছে। -
computeMaximumWindowMetrics()
পদ্ধতিটিcomputeCurrentWindowMetrics()
এর পরিবর্তে ব্যবহার করা হয় কারণ অ্যাপটি মাল্টি-উইন্ডো মোডে লঞ্চ করা যেতে পারে, যা স্ক্রিন ওরিয়েন্টেশন সেটিং উপেক্ষা করে। অ্যাপ উইন্ডোর সাইজ নির্ধারণ করার এবং অরিয়েন্টেশন সেটিং ওভাররাইড করার কোন মানে নেই যদি না অ্যাপ উইন্ডোটি পুরো ডিভাইসের স্ক্রীন হয়।
আপনার অ্যাপে computeMaximumWindowMetrics()
পদ্ধতি উপলব্ধ করার জন্য নির্ভরতা ঘোষণা করার নির্দেশাবলীর জন্য WindowManager দেখুন।
3. অ্যাপ ম্যানিফেস্ট সেটিং ওভাররাইড করুন
আপনি যখন নির্ধারণ করেছেন যে ডিভাইসটির কম্প্যাক্ট স্ক্রীন সাইজ আছে, তখন আপনি ম্যানিফেস্টের screenOrientation
সেটিং ওভাররাইড করতে Activity#setRequestedOrientation()
কল করতে পারেন:
কোটলিন
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) requestedOrientation = if (compactScreen()) ActivityInfo.SCREEN_ORIENTATION_PORTRAIT else ActivityInfo.SCREEN_ORIENTATION_FULL_USER ... // Replace with a known container that you can safely add a // view to where the view won't affect the layout and the view // won't be replaced. val container: ViewGroup = binding.container // Add a utility view to the container to hook into // View.onConfigurationChanged. This is required for all // activities, even those that don't handle configuration // changes. You can't use Activity.onConfigurationChanged, // since there are situations where that won't be called when // the configuration changes. View.onConfigurationChanged is // called in those scenarios. container.addView(object : View(this) { override fun onConfigurationChanged(newConfig: Configuration?) { super.onConfigurationChanged(newConfig) requestedOrientation = if (compactScreen()) ActivityInfo.SCREEN_ORIENTATION_PORTRAIT else ActivityInfo.SCREEN_ORIENTATION_FULL_USER } }) }
জাভা
@Override protected void onCreate(Bundle savedInstance) { super.onCreate(savedInstanceState); if (compactScreen()) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } else { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_USER); } ... // Replace with a known container that you can safely add a // view to where the view won't affect the layout and the view // won't be replaced. ViewGroup container = binding.container; // Add a utility view to the container to hook into // View.onConfigurationChanged. This is required for all // activities, even those that don't handle configuration // changes. You can't use Activity.onConfigurationChanged, // since there are situations where that won't be called when // the configuration changes. View.onConfigurationChanged is // called in those scenarios. container.addView(new View(this) { @Override protected void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); if (compactScreen()) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } else { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_USER); } } }); }
onCreate()
এবং View.onConfigurationChanged()
পদ্ধতিতে যুক্তি যোগ করার মাধ্যমে, আপনি সর্বাধিক উইন্ডো মেট্রিক্স পেতে সক্ষম হন এবং যখনই কার্যকলাপের আকার পরিবর্তন করা হয় বা প্রদর্শনের মধ্যে স্থানান্তর করা হয়, যেমন একটি ডিভাইস ঘূর্ণনের পরে বা যখন একটি ভাঁজযোগ্য ডিভাইস ভাঁজ করা হয় বা খোলা হয়। কনফিগারেশন পরিবর্তন কখন ঘটে এবং কখন তারা কার্যকলাপ বিনোদনের কারণ হয় সে সম্পর্কে আরও তথ্যের জন্য, কনফিগারেশন পরিবর্তন পরিচালনা করুন দেখুন।
মূল পয়েন্ট
-
screenOrientation
: অ্যাপ ম্যানিফেস্ট সেটিংস যা আপনাকে নির্দিষ্ট করতে সক্ষম করে যে আপনার অ্যাপ ডিভাইসের অভিযোজন পরিবর্তনে কীভাবে সাড়া দেয় - Jetpack WindowManager : লাইব্রেরির সেট যা আপনাকে অ্যাপ উইন্ডোর আকার এবং আকৃতির অনুপাত নির্ধারণ করতে সক্ষম করে; API স্তর 14 এর সাথে পশ্চাদমুখী সামঞ্জস্যপূর্ণ
-
Activity#setRequestedOrientation()
: পদ্ধতি যা দিয়ে আপনি রানটাইমে অ্যাপের অভিযোজন পরিবর্তন করতে পারেন
ফলাফল
ডিভাইসের ঘূর্ণন নির্বিশেষে আপনার অ্যাপটি এখন ছোট স্ক্রিনে পোর্ট্রেট ওরিয়েন্টেশনে থাকা উচিত। বড় স্ক্রিনে, অ্যাপটিকে ল্যান্ডস্কেপ এবং পোর্ট্রেট ওরিয়েন্টেশন সমর্থন করা উচিত।
এই নির্দেশিকা ধারণকারী সংগ্রহ
এই নির্দেশিকাটি এই কিউরেট করা কুইক গাইড সংগ্রহের অংশ যা বৃহত্তর অ্যান্ড্রয়েড উন্নয়ন লক্ষ্যগুলি কভার করে:
![](https://developer.android.com/static/images/quick-guides/collection-illustration.png?hl=bn)