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 का उपयोग करने की अनुशंसा की जाती है। लाइब्रेरी seamless transition का भी समर्थन करती है — लेआउट के बीच स्विच करते समय सहज एनिमेशन।

WindowManager का परीक्षण और डीबगिंग

Android Studio में Jetpack WindowManager के परीक्षण के लिए अंतर्निहित उपकरण शामिल हैं। एमुलेटर फोल्डेबल डिवाइस (Pixel Fold, Galaxy Z Fold) को Folding Postures टैब के माध्यम से मुद्रा स्विचिंग के साथ समर्थन करता है। 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 एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें