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 পরীক্ষার জন্য অন্তর্নির্মিত সরঞ্জাম রয়েছে। এমুলেটর 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 আপডেট উপেক্ষা করা, উল্লম্ব ভাঁজের সাথে বাউন্ডসের ভুল হ্যান্ডলিং এবং সমস্ত ভঙ্গিতে পরীক্ষার অভাব। পরামর্শ দেওয়া হচ্ছে প্রতিটি ভঙ্গি আলাদাভাবে পরীক্ষা করুন এবং তাদের মধ্যে পরিবর্তনের সময় আচরণ যাচাই করুন। ম্যানুয়াল আকার পরীক্ষার পরিবর্তে WindowSizeClass ব্যবহার করলে বাগ 60% কমে যায়।

সচরাচর জিজ্ঞাসিত প্রশ্ন

কোন Android সংস্করণ থেকে Jetpack WindowManager উপলব্ধ?

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 অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।

প্রকল্প নিয়ে আলোচনা করুন

আরও পড়ুন