ইমারসিভ মোডের জন্য সিস্টেম বার লুকান

কিছু কন্টেন্ট স্ট্যাটাস বার বা নেভিগেশন বারে কোনো নির্দেশক ছাড়াই ফুলস্ক্রিনে সবচেয়ে ভালোভাবে উপভোগ করা যায়। এর কিছু উদাহরণ হলো ভিডিও, গেম, ইমেজ গ্যালারি, বই এবং প্রেজেন্টেশন স্লাইড। একে ইমার্সিভ মোড বলা হয়। এই পৃষ্ঠাটি দেখায় কীভাবে আপনি ফুলস্ক্রিনে কন্টেন্টের সাথে ব্যবহারকারীদের আরও গভীরভাবে যুক্ত করতে পারেন।

চিত্র ১. ইমারসিভ মোডের উদাহরণ।

ইমার্সিভ মোড ব্যবহারকারীদের গেম খেলার সময় ভুলবশত অ্যাপ থেকে বেরিয়ে যাওয়া এড়াতে সাহায্য করে এবং ছবি, ভিডিও ও বই উপভোগ করার জন্য একটি ইমার্সিভ অভিজ্ঞতা প্রদান করে। তবে, ব্যবহারকারীরা নোটিফিকেশন চেক করতে, তাৎক্ষণিক কোনো কিছু খুঁজতে বা অন্য কোনো কাজ করতে কত ঘন ঘন অ্যাপ থেকে বের হন এবং আবার প্রবেশ করেন, সেদিকে খেয়াল রাখতে হবে। যেহেতু ইমার্সিভ মোডের কারণে ব্যবহারকারীরা সিস্টেম নেভিগেশনে সহজে প্রবেশাধিকার হারান, তাই শুধুমাত্র তখনই ইমার্সিভ মোড ব্যবহার করুন যখন এর ফলে ব্যবহারকারীর অভিজ্ঞতা কেবল অতিরিক্ত স্ক্রিন স্পেস ব্যবহারের চেয়ে বেশি উন্নত হয়।

সিস্টেম বারগুলো লুকানোর জন্য WindowInsetsControllerCompat.hide() এবং সেগুলোকে ফিরিয়ে আনার জন্য WindowInsetsControllerCompat.show() ব্যবহার করুন।

নিচের কোড স্নিপেটটিতে সিস্টেম বারগুলো লুকানো এবং দেখানোর জন্য একটি বাটন কনফিগার করার উদাহরণ দেখানো হয়েছে।

কোটলিন

override fun onCreate(savedInstanceState: Bundle?) {
    ...

    val windowInsetsController =
        WindowCompat.getInsetsController(window, window.decorView)
    // Configure the behavior of the hidden system bars.
    windowInsetsController.systemBarsBehavior =
        WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE

    // Add a listener to update the behavior of the toggle fullscreen button when
    // the system bars are hidden or revealed.
    ViewCompat.setOnApplyWindowInsetsListener(window.decorView) { view, windowInsets ->
        // You can hide the caption bar even when the other system bars are visible.
        // To account for this, explicitly check the visibility of navigationBars()
        // and statusBars() rather than checking the visibility of systemBars().
        if (windowInsets.isVisible(WindowInsetsCompat.Type.navigationBars())
            || windowInsets.isVisible(WindowInsetsCompat.Type.statusBars())) {
            binding.toggleFullscreenButton.setOnClickListener {
                // Hide both the status bar and the navigation bar.
                windowInsetsController.hide(WindowInsetsCompat.Type.systemBars())
            }
        } else {
            binding.toggleFullscreenButton.setOnClickListener {
                // Show both the status bar and the navigation bar.
                windowInsetsController.show(WindowInsetsCompat.Type.systemBars())
            }
        }
        ViewCompat.onApplyWindowInsets(view, windowInsets)
    }
}

জাভা

@Override
protected void onCreate(Bundle savedInstanceState) {
    ...

    WindowInsetsControllerCompat windowInsetsController =
            WindowCompat.getInsetsController(getWindow(), getWindow().getDecorView());
    // Configure the behavior of the hidden system bars.
    windowInsetsController.setSystemBarsBehavior(
            WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
    );

    // Add a listener to update the behavior of the toggle fullscreen button when
    // the system bars are hidden or revealed.
    ViewCompat.setOnApplyWindowInsetsListener(
        getWindow().getDecorView(),
        (view, windowInsets) -> {
        // You can hide the caption bar even when the other system bars are visible.
        // To account for this, explicitly check the visibility of navigationBars()
        // and statusBars() rather than checking the visibility of systemBars().
        if (windowInsets.isVisible(WindowInsetsCompat.Type.navigationBars())
                || windowInsets.isVisible(WindowInsetsCompat.Type.statusBars())) {
            binding.toggleFullscreenButton.setOnClickListener(v -> {
                // Hide both the status bar and the navigation bar.
                windowInsetsController.hide(WindowInsetsCompat.Type.systemBars());
            });
        } else {
            binding.toggleFullscreenButton.setOnClickListener(v -> {
                // Show both the status bar and the navigation bar.
                windowInsetsController.show(WindowInsetsCompat.Type.systemBars());
            });
        }
        return ViewCompat.onApplyWindowInsets(view, windowInsets);
    });
}

ঐচ্ছিকভাবে, আপনি কোন ধরনের সিস্টেম বার লুকাবেন তা নির্দিষ্ট করে দিতে পারেন এবং ব্যবহারকারী যখন সেগুলোর সাথে ইন্টারঅ্যাক্ট করবে তখন সেগুলোর আচরণ নির্ধারণ করতে পারেন।

কোন সিস্টেম বারগুলি লুকাতে হবে তা নির্দিষ্ট করুন।

কোন ধরনের সিস্টেম বার লুকানো হবে তা নির্দিষ্ট করতে, WindowInsetsControllerCompat.hide() -এ নিম্নলিখিত প্যারামিটারগুলোর মধ্যে একটি পাস করুন।

লুকানো সিস্টেম বারগুলির আচরণ নির্দিষ্ট করুন

ব্যবহারকারী যখন লুকানো সিস্টেম বারগুলির সাথে ইন্টারঅ্যাক্ট করে তখন সেগুলি কীভাবে আচরণ করবে তা নির্দিষ্ট করতে WindowInsetsControllerCompat.setSystemBarsBehavior() ব্যবহার করুন।

  • সংশ্লিষ্ট ডিসপ্লেতে ব্যবহারকারীর যেকোনো ইন্টারঅ্যাকশনের সময় লুকানো সিস্টেম বারগুলো প্রকাশ করতে WindowInsetsControllerCompat.BEHAVIOR_SHOW_BARS_BY_TOUCH ব্যবহার করুন।

  • যেকোনো সিস্টেম জেসচারের মাধ্যমে লুকানো সিস্টেম বারগুলো প্রকাশ করতে WindowInsetsControllerCompat.BEHAVIOR_SHOW_BARS_BY_SWIPE ব্যবহার করুন, যেমন স্ক্রিনের যে প্রান্ত থেকে বারটি লুকানো আছে সেখান থেকে সোয়াইপ করা।

  • সিস্টেম জেসচারের মাধ্যমে লুকানো সিস্টেম বারগুলোকে সাময়িকভাবে প্রকাশ করতে WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE ব্যবহার করুন; যেমন, স্ক্রিনের যে প্রান্ত থেকে বারটি লুকানো আছে, সেখান থেকে সোয়াইপ করা। এই ক্ষণস্থায়ী সিস্টেম বারগুলো আপনার অ্যাপের কন্টেন্টের উপর ভেসে ওঠে, এগুলোতে কিছুটা স্বচ্ছতা থাকতে পারে এবং একটি নির্দিষ্ট সময় পর স্বয়ংক্রিয়ভাবে অদৃশ্য হয়ে যায়।