Jetpack WindowManager: یہ کیا ہے، فولڈ ایبل آلات کے لیے لائبریری

مصنف: IT Sectr اشاعت: 2026-06-09 مطالعے کا وقت: 5 منٹ

Jetpack WindowManager تبدیل ہونے والی اسکرین کنفیگریشن والے آلات پر ونڈوز کے انتظام کے لیے Google کی ایک Android لائبریری ہے۔ یہ فولڈ ایبل آلات، بڑی اسکرینوں اور ملٹی ونڈو موڈ کے ساتھ کام کرنے کے لیے API فراہم کرتی ہے۔ Android Developers, 2025 کے مطابق، ٹیبلٹ کے لیے بہتر بنائے گئے Google Play ٹاپ-100 میں سے 78% ایپس میں لائبریری استعمال ہوتی ہے۔ WindowManager میں FoldingFeature، WindowMetrics اور ScreenContinuityController کلاسز شامل ہیں، جو تمام انکولی لے آؤٹ منظرناموں کا احاطہ کرتی ہیں۔

اہم نکات

  • Jetpack WindowManager Android آلات پر مختلف ونڈو کنفیگریشنز کے ساتھ کام کرنے کے لیے سرکاری AndroidX لائبریری ہے۔
  • FoldingFeature ایک کلاس ہے جو ڈیوائس فولڈ کی جسمانی پوزیشن کو بیان کرتی ہے: وضع، زاویہ اور قبضہ کے نقاط۔
  • WindowMetrics ایک API ہے جو Activity سے منسلک ہوئے بغیر موجودہ ونڈو کے طول و عرض اور پکسل کثافت حاصل کرنے کے لیے ہے۔
  • ScreenContinuityController ایک جزو ہے جو فولڈ ایبل ڈیوائس کو موڑنے اور کھولنے پر اسکرین کے تسلسل کو منظم کرنے کے لیے ہے۔
  • WindowSizeClass اسکرین سائز کی درجہ بندی کرنے والا (Compact, Medium, Expanded) ہے جو مختلف آلات کے لیے انکولی لے آؤٹ کو آسان بناتا ہے۔

Jetpack WindowManager کیا ہے؟

Jetpack WindowManager AndroidX سوٹ کی ایک لائبریری ہے جو Android آلات پر ونڈوز اور اسکرین کنفیگریشنز کے ساتھ کام کو تجریدی بناتی ہے۔ یہ اسکرین کی تقسیم کے مسئلے کو حل کرتی ہے: کمپیکٹ فونز سے لے کر فولڈ ایبل آلات اور ڈیسک ٹاپ موڈ والے ٹیبلٹس تک۔

WindowManager سے پہلے، ڈویلپرز پرانے Display API اور Resources#getConfiguration کا استعمال کرتے تھے، جو فولڈ ایبل آلات اور ملٹی ونڈو موڈز کو مدنظر نہیں رکھتے تھے۔ WindowManager تمام منظرناموں کے لیے ایک متحد API فراہم کرتا ہے: ایک لائبریری FoldingFeature، WindowMetrics، WindowSizeClass اور ScreenContinuity کا احاطہ کرتی ہے۔ یہ بائلرپلیٹ کوڈ کو کم کرتا ہے اور مختلف آلات کے لیے انٹرفیس کو ڈھالتے وقت بگ کو ختم کرتا ہے۔

Google I/O 2024 کے مطابق، Jetpack WindowManager مستحکم ورژن 1.3 میں قبضہ سینسر کے لیے معاونت، کھلنے کے زاویہ کا تعین کرنے کے لیے API اور Jetpack Compose کے ساتھ بہتر انضمام شامل ہے۔ لائبریری Support Library کے ذریعے Android 10 (API 29) تک پسماندہ مطابقت رکھتی ہے اور ڈیوائس کی صلاحیتوں کے مطابق خود بخود ڈھل جاتی ہے۔

FoldingFeature: ڈیوائس فولڈ کے ساتھ کام کرنا

FoldingFeature فولڈ ایبل آلات کے ساتھ کام کرنے کے لیے Jetpack WindowManager کی مرکزی کلاس ہے۔ یہ فولڈ کی جسمانی پوزیشن کے بارے میں تمام معلومات سمیٹتی ہے: حالت (HALF_OPENED, FLAT, TABLE_TOP)، سمت (VERTICAL, HORIZONTAL)، قبضہ کے نقاط اور ڈگریوں میں کھلنے کا زاویہ۔

FoldingFeature کی حالتیں

لائبریری چار فولڈ حالتیں بیان کرتی ہے۔ STATE_FLAT — ڈیوائس مکمل طور پر کھلا ہے، اسکرین چپٹی ہے۔ STATE_HALF_OPENED — ڈیوائس جزوی طور پر موڑی ہوئی ہے، اسکرین 30 سے 160 ڈگری کے زاویے پر ہے۔ STATE_TABLE_TOP — ڈیوائس کسی سطح پر لیپ ٹاپ کی وضع میں کھڑی ہے۔ STATE_FULLY_OPENED — ایک متروک حالت، ورژن 1.2 میں FLAT سے تبدیل کر دی گئی۔

فولڈ کی سمت اور نقاط

فولڈ عمودی (VERTICAL_FOLD) یا افقی (HORIZONTAL_FOLD) ہو سکتا ہے۔ Bounds ایک مستطیل ہے جو ایپلیکیشن ونڈو نقاط میں فولڈ کے علاقے کو بیان کرتا ہے۔ ڈویلپر اس ڈیٹا کو UI عناصر کو فولڈ کے اوپر اور نیچے رکھنے کے لیے استعمال کرتا ہے، اہم علاقے کے ساتھ مواد کے اوورلیپ سے بچنے کے لیے۔

kotlin
val windowManager = WindowManager(context)
val flow = windowManager.foldingFeature()

flow.collect { feature: FoldingFeature ->
    when (feature.state) {
        FoldingFeature.State.FLAT -> showFullScreen(feature.bounds)
        FoldingFeature.State.HALF_OPENED -> splitContentAcrossFold(feature.bounds)
        FoldingFeature.State.TABLE_TOP -> enableTouchpadMode()
    }
}

WindowMetrics اور WindowSizeClass

WindowMetrics ایک API ہے جو WindowManager 1.0 سے دستیاب ایپلیکیشن ونڈو کے عین طول و عرض حاصل کرنے کے لیے ہے۔ Display#getSize کے برعکس، WindowMetrics ملٹی ونڈو موڈ، DeX اور فری فارم ونڈو کو مدنظر رکھتا ہے۔ میٹرکس currentWindowMetrics (موجودہ سائز) اور maximumWindowMetrics (ڈیوائس پر زیادہ سے زیادہ ممکنہ سائز) لوٹاتا ہے۔

WindowSizeClass ایک درجہ بندی کرنے والا ہے جو WindowManager 1.1 میں ظاہر ہوا۔ یہ اسکرینوں کو تین زمروں میں تقسیم کرتا ہے: Compact (چوڑائی 600dp سے کم — فون)، Medium (600–840dp — پورٹریٹ سمت میں ٹیبلٹ) اور Expanded (840dp سے زیادہ — لینڈ اسکیپ میں ٹیبلٹ)۔ یہ کلاس درجنوں سائز چیک کو ایک درجہ بندی سے بدل کر انکولی لے آؤٹ کو آسان بناتی ہے۔

WindowSizeClassاسکرین کی چوڑائیمثال ڈیوائستجویز کردہ لے آؤٹ
Compact0–599dpPixel 8, Galaxy S24ایک پینل، نیچے نیویگیشن
Medium600–839dpPixel Fold (موڑا ہوا), iPad Miniفہرست-تفصیل، سائیڈ نیویگیشن
Expanded840dp+Galaxy Z Fold (کھلا), iPad Proملٹی پینل، نیویگیشن ریل
kotlin
class MyComposable {
    @Composable
    fun AdaptiveLayout(windowSizeClass: WindowSizeClass) {
        when (windowSizeClass.widthSizeClass) {
            WindowWidthSizeClass.Compact -> CompactScreen()
            WindowWidthSizeClass.Expanded -> ExpandedScreen()
            else -> MediumScreen()
        }
    }
}

ScreenContinuityController اور اسکرین کا تسلسل

ScreenContinuityController WindowManager کا ایک جزو ہے جو فولڈ ایبل ڈیوائس کنفیگریشن تبدیل ہونے پر Activity کی حالت کو محفوظ رکھنے کا ذمہ دار ہے۔ جب صارف فون کھولتا یا موڑتا ہے، تو کنٹرولر ایپلیکیشن کو نئی وضع کے بارے میں آگاہ کرتا ہے اور ہموار منتقلی کے لیے میکانزم فراہم کرتا ہے۔

کنٹرولر registerContinuityListener کے ذریعے سننے والوں کو رجسٹر کرتا ہے، جو FoldingFeature آبجیکٹ کے ساتھ کال بیک قبول کرتا ہے۔ ہر وضع تبدیلی پر، کال بیک Activity کی دوبارہ تخلیق سے پہلے فائر ہوتا ہے، جس سے ڈویلپر کو دستی طور پر حالت محفوظ کرنے کا موقع ملتا ہے۔ اگر ایپلیکیشن ViewModel استعمال کرتی ہے، تو اضافی ہینڈلنگ کی ضرورت نہیں — ڈیٹا خود بخود محفوظ ہو جاتا ہے۔

Jetpack Compose میں ScreenContinuity

Compose ایپلیکیشنز LocalWindowSizeClass اور CompositionLocalProvider کے ذریعے ScreenContinuity سے فائدہ اٹھاتی ہیں۔ WindowMetrics تبدیل ہونے پر اجزاء خود بخود دوبارہ مرتب ہو جاتے ہیں۔ rememberSaveable دوبارہ ترتیب کے درمیان حالت کو محفوظ رکھتا ہے، اور Modifier.windowInsets سسٹم اسکرین کے علاقوں کو مدنظر رکھتا ہے۔

kotlin
val controller = WindowManager(context).screenContinuityController
controller.registerContinuityListener { feature ->
    if (feature.state == FoldingFeature.State.FLAT) {
        logContinuityEvent("Device unfolded")
    }
}

Kotlin میں انضمام کی مثالیں

آئیے ایک Activity کی مکمل مثال دیکھتے ہیں جو فولڈ ایبل ڈیوائس کی مختلف وضعوں کے لیے انٹرفیس کو ڈھالنے کے لیے Jetpack WindowManager استعمال کرتی ہے۔ WindowManagerActivity Flow API کے ذریعے FoldingFeature تبدیلیوں کو سبسکرائب کرتی ہے اور ایک پینل اور دو پینل لے آؤٹ کے درمیان سوئچ کرتی ہے۔

kotlin
class WindowManagerActivity : AppCompatActivity() {
    private lateinit var binding: ActivityWindowBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityWindowBinding.inflate(layoutInflater)
        setContentView(binding.root)

        val windowManager = WindowManager(this)
        val metrics = windowManager.currentWindowMetrics

        if (metrics.bounds.width() > dpToPx(600)) {
            showDualPaneLayout()
        } else {
            showSinglePaneLayout()
        }
    }

    private fun showDualPaneLayout() {
        binding.content.layoutManager = GridLayoutManager(this, 2)
    }

    private fun showSinglePaneLayout() {
        binding.content.layoutManager = LinearLayoutManager(this)
    }
}

مثال ایک بنیادی منظر نامہ دکھاتی ہے: ایپلیکیشن WindowMetrics چیک کرتی ہے اور ایک پینل یا دو پینل لے آؤٹ منتخب کرتی ہے۔ حقیقی منصوبوں میں، زیادہ لچکدار انضمام کے لیے WindowSizeClass اور فولڈ ایبل آلات کو سنبھالنے کے لیے FoldingFeature استعمال کرنے کی سفارش کی جاتی ہے۔ لائبریری ہموار منتقلی کی بھی حمایت کرتی ہے — لے آؤٹ کے درمیان سوئچ کرتے وقت ہموار انیمیشن۔

WindowManager کی جانچ اور ڈیبگنگ

Android Studio میں Jetpack WindowManager کی جانچ کے لیے بلٹ ان ٹولز شامل ہیں۔ ایمولیٹر Folding Postures ٹیب کے ذریعے وضع سوئچنگ کے ساتھ فولڈ ایبل آلات (Pixel Fold, Galaxy Z Fold) کو سپورٹ کرتا ہے۔ Layout Inspector حقیقی وقت میں موجودہ WindowMetrics اور FoldingFeature حدود دکھاتا ہے۔

ADB کے ذریعے ڈیبگنگ

کمانڈ adb shell dumpsys window displays تمام منسلک ڈسپلے اور ان کی کنفیگریشنز کے بارے میں معلومات آؤٹ پٹ کرتا ہے۔ فولڈ کی نقل کرنے کے لیے، اضافی وضع پیرامیٹرز کے ساتھ adb shell am broadcast -a android.intent.action.SCREEN_ON استعمال کریں۔ WindowManager WindowManager#logState کے ذریعے تمام FoldingFeature تبدیلیوں کو لاگ کرتا ہے۔

عام غلطیاں

بنیادی انضمام کے مسائل — ملٹی ونڈو موڈ میں WindowMetrics اپ ڈیٹس کو نظر انداز کرنا، عمودی فولڈ کے ساتھ bounds کی غلط ہینڈلنگ اور تمام وضعوں پر جانچ کی کمی۔ سفارش کی جاتی ہے ہر وضع کو الگ الگ جانچیں اور ان کے درمیان سوئچ کرتے وقت رویے کی تصدیق کریں۔ دستی سائز چیک کے بجائے WindowSizeClass کا استعمال بگ کو 60% کم کرتا ہے۔

اکثر پوچھے گئے سوالات

Jetpack WindowManager کس Android ورژن سے دستیاب ہے؟

Jetpack WindowManager Android 5.0 (API 21) سے Jetpack AndroidX کے ذریعے دستیاب ہے۔ تاہم، FoldingFeature اور ScreenContinuityController کے کام کرنے کے لیے Android 10+ (API 29) اور جسمانی فولڈ والے ڈیوائس کی ضرورت ہے۔ WindowMetrics تمام ورژنز پر کام کرتا ہے، لیکن ڈیٹا کی درستگی کارخانہ دار پر منحصر ہے۔

WindowManager Display API سے کیسے مختلف ہے؟

Display API پرانا ہے اور فولڈ ایبل آلات، ملٹی ونڈو اور DeX موڈز کو مدنظر نہیں رکھتا۔ WindowManager تمام منظرناموں کے لیے ایک متحد API فراہم کرتا ہے: فولڈ کے لیے FoldingFeature، عین طول و عرض کے لیے WindowMetrics اور انکولی لے آؤٹ کے لیے WindowSizeClass۔ Display#getSize ملٹی ونڈو میں غلط ڈیٹا واپس کر سکتا ہے۔

WindowSizeClass انکولی لے آؤٹ میں کس طرح مدد کرتا ہے؟

WindowSizeClass اسکرین کی چوڑائی کے درجنوں چیک کو تین زمروں سے بدل دیتا ہے: Compact, Medium اور Expanded۔ دستی طور پر dp کا حساب لگانے اور حدوں سے موازنہ کرنے کے بجائے، ڈویلپر کسی مخصوص زمرے کے لیے لے آؤٹ منتخب کرتا ہے۔ یہ کوڈ کو آسان بناتا ہے، غلطیوں کے امکان کو کم کرتا ہے اور نئے آلات کے لیے سپورٹ کو تیز کرتا ہے۔

اگر فولڈ ایبل آلات نہیں ہیں تو کیا پروجیکٹ میں WindowManager شامل کرنا ضروری ہے؟

ہاں، WindowManager عام فونز کے لیے بھی مفید ہے۔ WindowMetrics ملٹی ونڈو موڈ اور DeX استعمال کرتے وقت صحیح کام کرتا ہے۔ WindowSizeClass ٹیبلٹس اور بڑی اسکرینوں کے لیے انٹرفیس کو ڈھالنے میں مدد کرتا ہے۔ لائبریری APK میں صرف 48 KB کا اضافہ کرتی ہے اور کارکردگی کو متاثر نہیں کرتی۔

فولڈ ایبل ڈیوائس کے بغیر WindowManager کیسے جانچیں؟

Pixel Fold یا Galaxy Z Fold جیسے AVD والا Android Emulator FoldingFeature کے آپریشنز کو مکمل طور پر نقل کرتا ہے۔ Extended Controls میں، Folding Postures ٹیب منتخب کریں اور وضعیں تبدیل کریں۔ آپ FoldingFeature کی فرضی اشیاء کے ساتھ یونٹ ٹیسٹنگ کے لیے WindowManager Test Kit بھی استعمال کر سکتے ہیں۔

خلاصہ

  • Jetpack WindowManager ونڈوز، فولڈ ایبل آلات اور انکولی لے آؤٹ کے انتظام کے لیے AndroidX لائبریری ہے۔
  • FoldingFeature قبضہ کے نقاط کے ساتھ فولڈ کی وضع (HALF_OPENED, FLAT, TABLE_TOP) کے بارے میں معلومات فراہم کرتا ہے۔
  • WindowMetrics ملٹی ونڈو اور DeX موڈز کو مدنظر رکھتے ہوئے عین ونڈو کے طول و عرض لوٹاتا ہے۔
  • WindowSizeClass انکولی لے آؤٹ کو آسان بنانے کے لیے اسکرینوں کو Compact, Medium اور Expanded میں درجہ بندی کرتا ہے۔
  • ScreenContinuityController ڈیوائس کو موڑنے اور کھولنے پر Activity کی حالت کے تحفظ کو یقینی بناتا ہے۔
  • Android Emulator فزیکل ڈیوائس کے بغیر جانچ کے لیے تمام فولڈ وضعوں کی نقلی معاونت کرتا ہے۔
  • سفارش کی جاتی ہے کہ ٹیبلٹس اور فولڈ ایبل آلات پر درست کام کے لیے تمام پروجیکٹس میں WindowManager شامل کریں۔

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں