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 ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں