Window Size Class হল Jetpack WindowManager-এর একটি API যা অ্যাপ্লিকেশন উইন্ডোকে তিনটি বিভাগে ভাগ করে: Compact, Medium এবং Expanded। ফিজিক্যাল রেজোলিউশন বা পিক্সেল ঘনত্ব পরীক্ষা করার পরিবর্তে, ক্লাসগুলি dp-তে উপলব্ধ প্রস্থ বিশ্লেষণ করে — এটি যেকোনো ডিভাইসে পূর্বানুমানযোগ্য ফলাফল দেয়। Android Developers Documentation (2025) অনুসারে, WindowManager-এর কারণে Window Size Class Jetpack Compose এবং View সিস্টেমে অভিযোজিত ইন্টারফেসের জন্য মানদণ্ডে পরিণত হয়েছে।
মূল পয়েন্ট
Window Size Class হল একটি Android প্ল্যাটফর্ম API যা Jetpack WindowManager লাইব্রেরিতে অন্তর্ভুক্ত এবং অ্যাপ্লিকেশন উইন্ডোর উপলব্ধ স্থানকে তিনটি বিভাগে শ্রেণিবদ্ধ করে। রিসোর্স কোয়ালিফায়ার (small/large/xlarge) এর ঐতিহ্যবাহী পদ্ধতির বিপরীতে, Window Size Class মানগুলির একটি পৃথক সেট প্রদান করে যা ডেভেলপার ইন্টারফেস ডিজাইন করার সময় নির্ভর করতে পারে।
APIটি Android 7.0 Nougat-এ মাল্টি-উইন্ডো মোড সমর্থনের অংশ হিসেবে আবির্ভূত হয়েছিল, কিন্তু সক্রিয় গ্রহণ শুরু হয় Jetpack WindowManager 1.1 (2022) এর সাথে। Google Display.getSize() এর মাধ্যমে স্ক্রিন প্রস্থ পরীক্ষা করার পরিবর্তে অভিযোজিত লেআউট তৈরির জন্য Window Size Class-কে প্রধান টুল হিসেবে সুপারিশ করে।
শ্রেণিবিভাগ dp-তে উইন্ডোর প্রস্থের উপর ভিত্তি করে, ফিজিক্যাল সাইজ বা পিক্সেল ঘনত্বের উপর নয়। এর অর্থ হল দুটি ভিন্ন রেজোলিউশনের কিন্তু dp-তে সমান প্রস্থের ডিভাইস একই শ্রেণি পাবে — ইন্টারফেসটি পূর্বানুমানযোগ্যভাবে অভিন্ন হবে।
Compact — 600 dp পর্যন্ত চওড়া উইন্ডোর জন্য শ্রেণি। পোর্ট্রেট মোডে ফোন, ভাঁজ করা অবস্থায় অধিকাংশ ফোল্ডেবল (Galaxy Z Flip)। ইন্টারফেস এক কলামে নির্মিত, Bottom Navigation-এর মাধ্যমে নেভিগেশন।
Medium — 600–840 dp চওড়া উইন্ডোর জন্য শ্রেণি। পোর্ট্রেটে ট্যাবলেট, ল্যান্ডস্কেপে ফোন, অর্ধেক খোলা অবস্থায় ফোল্ডেবল ডিভাইস। ইন্টারফেস দুটি কলাম ব্যবহার করে — উদাহরণস্বরূপ, বামে তালিকা এবং ডানে বিবরণ। Navigation Rail Bottom Navigation-কে প্রতিস্থাপন করে।
Expanded — 840 dp থেকে চওড়া উইন্ডোর জন্য শ্রেণি। ল্যান্ডস্কেপে ট্যাবলেট, ডেস্কটপ উইন্ডো, খোলা অবস্থায় ফোল্ডেবল ডিভাইস। ইন্টারফেস তিন বা ততোধিক প্যানেল, Permanent Navigation Drawer, টুল প্যানেল ব্যবহার করতে পারে।
Material Design 3-এ প্রতিটি শ্রেণির জন্য অভিযোজিত উপাদান সংজ্ঞায়িত করা হয়েছে: Medium-এর জন্য Navigation Rail, Expanded-এর জন্য Navigation Drawer, Compact-এর জন্য Bottom Navigation। ডেভেলপারকে breakpoints নির্বাচন করার প্রয়োজন নেই — সেগুলি ইতিমধ্যেই API দ্বারা সংজ্ঞায়িত।
Window Size Class গণনা করা হয় অ্যাপ্লিকেশন উইন্ডোর বর্তমান প্রস্থের উপর ভিত্তি করে dp-তে, সিস্টেম উপাদানগুলি — স্ট্যাটাস বার, নেভিগেশন বার, Split Screen-এ স্ক্রিন বিভাজন — বিবেচনায় নিয়ে। API উইন্ডো কনফিগারেশন পরিবর্তনের সময় ট্রিগার হয়: ডিভাইস রোটেশন, মাল্টি-উইন্ডো মোডে প্রবেশ, ফোল্ডেবল ডিভাইস খোলা।
শ্রেণি পাওয়ার জন্য androidx.window লাইব্রেরি থেকে WindowSizeClass ক্লাস ব্যবহার করা হয়। ডেভেলপার একটি Flow (Kotlin) বা LiveData (Java)-এ সাবস্ক্রাইব করে যা উইন্ডো সাইজের প্রতিটি পরিবর্তনে স্বয়ংক্রিয়ভাবে শ্রেণি আপডেট করে — ম্যানুয়াল onConfigurationChanged হ্যান্ডলিং ছাড়া।
শ্রেণিবিভাগ তিনটি ধাপে ঘটে। প্রথম — পিক্সেলে বর্তমান উইন্ডো প্রস্থ মাপা। দ্বিতীয় — DisplayMetrics.density-এর মাধ্যমে dp-তে রূপান্তর। তৃতীয় — প্রাপ্ত মান তুলনা করা সীমার সাথে: 600 dp-এর কম — Compact, 600–840 — Medium, 840 থেকে — Expanded।
val windowSizeClass = currentWindowAdaptiveInfo().windowSizeClass()
when (windowSizeClass.windowWidthSizeClass) {
WindowWidthSizeClass.COMPACT -> // compact width
WindowWidthSizeClass.MEDIUM -> // medium width
WindowWidthSizeClass.EXPANDED -> // expanded width
}
প্রস্থ (windowWidthSizeClass) ছাড়াও, API উইন্ডো উচ্চতার জন্য একটি শ্রেণি প্রদান করে (windowHeightSizeClass) — ল্যান্ডস্কেপ ওরিয়েন্টেশন এবং ডেস্কটপ উইন্ডোর জন্য উপযোগী।
Jetpack Compose-এ, Window Size Class ব্যবহার করা হয় currentWindowAdaptiveInfo() ফাংশনের মাধ্যমে, যা প্রস্থ এবং উচ্চতা শ্রেণি সহ WindowAdaptiveInfo ফেরত দেয়। এই ফাংশন শুধু উইন্ডো সাইজই নয়, ইনপুট টাইপ (কীবোর্ড, মাউস, টাচ) — WindowPosture এবং WindowLayoutInfo-এর মাধ্যমেও বিবেচনায় নেয়।
একটি সাধারণ দৃশ্যকল্প হল শ্রেণি অনুসারে লেআউটের মধ্যে স্যুইচ করা। উদাহরণস্বরূপ, Compact-এ নির্বাচন সহ BottomSheet দেখানো হয়, Medium-এ — একটি সাইড প্যানেল, Expanded-এ — একটি স্থায়ী Navigation Drawer।
@Composable
fun AdaptiveNavigation(windowSizeClass: WindowWidthSizeClass) {
when (windowSizeClass) {
WindowWidthSizeClass.COMPACT -> BottomNavigation()
WindowWidthSizeClass.MEDIUM -> NavigationRail()
WindowWidthSizeClass.EXPANDED -> NavigationDrawer()
}
}
Material Design 3-এ, NavigationSuiteScaffold উপাদানগুলি স্বয়ংক্রিয়ভাবে Window Size Class-এর সাথে খাপ খায় — ডেভেলপারকে শর্তাধীন লজিক লিখতে হয় না।
Material Design 3 (Material You) সম্পূর্ণরূপে Window Size Class-এর সাথে সংহত। Material 3-এ অভিযোজিত লেআউট সিস্টেম নির্ধারণ করে প্রতিটি শ্রেণির জন্য কোন নেভিগেশন উপাদান ব্যবহার করতে হবে: Compact-এর জন্য BottomNavigation, Medium-এর জন্য NavigationRail, Expanded-এর জন্য NavigationDrawer।
এই সংহতকরণ Adaptive API স্তরে কাজ করে, যা Window Size Class-কে অন্যান্য সংকেতের সাথে একত্রিত করে — FoldState (ফোল্ডেবল ডিভাইস) এবং WindowPosture (স্ক্রিন অবস্থান)। Adaptive API material3-adaptive লাইব্রেরির মাধ্যমে উপলব্ধ।
Material 3 চারটি অভিযোজিত উচ্চ-স্তরের উপাদান প্রদান করে: ListDetailPaneScaffold, SupportingPaneScaffold, NavigationSuiteScaffold এবং AdaptiveSheet। এদের প্রতিটি অতিরিক্ত কনফিগারেশন ছাড়াই Window Size Class অনুসারে নিজস্ব আচরণ পরিবর্তন করে।
| শ্রেণি | নেভিগেশন উপাদান | Pane Scaffold |
|---|---|---|
| Compact | Bottom Navigation | লুকানো প্যানেল |
| Medium | Navigation Rail | স্লাইডিং প্যানেল |
| Expanded | Navigation Drawer | স্থায়ী প্যানেল |
Window Size Class ব্যবহার মোবাইল ডেভেলপমেন্টে তিনটি মূল সুবিধা প্রদান করে। প্রথম — পূর্বানুমানযোগ্যতা: স্ক্রিন সাইজের শত শত কম্বিনেশনের পরিবর্তে, ডেভেলপার তিনটি শ্রেণি নিয়ে কাজ করে। এটি টেস্ট দৃশ্যকল্পের সংখ্যা এবং লেআউট সম্পর্কিত বাগ আমূলভাবে হ্রাস করে।
দ্বিতীয় — মাল্টি-উইন্ডো মোডে স্বয়ংক্রিয় অভিযোজন। যখন ব্যবহারকারী Split Screen-এ প্রবেশ করে, উইন্ডোর প্রস্থ পরিবর্তিত হয় — Window Size Class তাৎক্ষণিকভাবে পুনর্গণনা করে এবং ইন্টারফেস খাপ খায়। এই API ছাড়া, বিভক্ত স্ক্রিনে অ্যাপটি ফোন ইন্টারফেসের একটি ছোট সংস্করণ দেখায়।
তৃতীয় — Material Design 3-এর সাথে সামঞ্জস্য। Google Window Size Class-কে অভিযোজিত উপাদান সিস্টেমে অন্তর্ভুক্ত করেছে, তাই Material 3-এ নির্মিত ইন্টারফেসগুলি অতিরিক্ত কাজ ছাড়াই স্বয়ংক্রিয়ভাবে বড় স্ক্রিন ডিজাইনের জন্য Google-এর সুপারিশ অনুসরণ করে।
সচরাচর জিজ্ঞাসিত প্রশ্ন
Screen Size Buckets (small/large/xlarge) হল Android 1.6–6.0-এর একটি পুরনো পদ্ধতি যা স্ক্রিনের ফিজিক্যাল সাইজের উপর ভিত্তি করে। Window Size Class dp-তে উপলব্ধ উইন্ডো প্রস্থের উপর ফোকাস করে এবং উইন্ডো সাইজ পরিবর্তনের সময় রিয়েল টাইমে কাজ করে।
Window Size Class Android 7.0+-এ Jetpack WindowManager-এর মাধ্যমে ব্যাকপোর্ট লাইব্রেরি সহ উপলব্ধ। Android 6 এবং তার নিচের জন্য — শুধু Compact, কারণ মাল্টি-উইন্ডো নেই। WindowMetrics-এর মাধ্যমে ফলব্যাক ব্যবহার করুন।
ডিভাইস খোলার সময়, উইন্ডোর প্রস্থ পরিবর্তিত হয় এবং Window Size Class স্বয়ংক্রিয়ভাবে পুনর্গণনা করে। উপলব্ধ এলাকা বৃদ্ধির কারণে শ্রেণি Compact থেকে Expanded-এ পরিবর্তিত হতে পারে।
হ্যাঁ, Activity বা Fragment-এ WindowManager-এর মাধ্যমে। WindowSizeClass পাওয়ার পর, XML লেআউটের মধ্যে স্যুইচ করতে বা View-এর দৃশ্যমানতা পরিবর্তন করতে শর্তাধীন লজিক ব্যবহার করুন।
উইন্ডো উচ্চতার জন্য, সীমাগুলি ভিন্ন: Compact — 480 dp পর্যন্ত, Medium — 480–900 dp, Expanded — 900 dp থেকে। WindowHeightSizeClass ল্যান্ডস্কেপ ওরিয়েন্টেশন এবং ডেস্কটপে উপযোগী।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন