ইমার্সিভ মোড (Immersive Mode): সিস্টেম নেভিগেশন বার এবং স্ট্যাটাস বার হাইড করা
গুরুত্বপূর্ণ দ্রষ্টব্য: আধুনিক অ্যান্ড্রয়েড ভার্সনগুলিতে (Android 4.4 KitKat+) "হোম", "ব্যাক", "রিসেন্ট" বাটনগুলো পুরোপুরি ডিজেবল করা সম্ভব নয় কারণ এগুলো সিস্টেম লেভেলের UI। তবে ইমার্সিভ মোড (Immersive Mode) ব্যবহার করে এগুলো আটোমেটিক্যালি হাইড করা এবং ব্যবহারকারীর টাচ দিলে আবার দেখানো সম্ভব। এই টিউটোরিয়ালে সেই পদ্ধতিটি দেখানো হয়েছে।
প্রয়োজনীয় ধাপসমূহ
ধাপ ১: নতুন প্রজেক্ট তৈরি করুন
Android Studio-তে একটি নতুন প্রজেক্ট তৈরি করুন।
ধাপ ২: লেআউট ফাইল (activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp"
tools:context=".MainActivity">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="ইমার্সিভ মোড: হোম ও সিস্টেম বাটন হাইড"
android:textAlignment="center"
android:textSize="24sp"
android:textStyle="bold" />
</RelativeLayout>
ধাপ ৩: MainActivity.java - ইমার্সিভ মোড ইমপ্লিমেন্টেশন
package com.example.immersivemode;
import android.os.Bundle;
import android.view.View;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// onCreate-এ hideNavigationBar() কল করবেন না, onWindowFocusChanged-এ করুন
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus) {
hideNavigationBar();
}
}
private void hideNavigationBar() {
View decorView = getWindow().getDecorView();
// ইমার্সিভ স্টিকি ফ্ল্যাগস - ব্যবহারকারী স্বাইপ করলে বারগুলো দেখাবে, আবার হাইড করবে
int uiOptions = View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
decorView.setSystemUiVisibility(uiOptions);
}
}
মূল সিস্টেম UI ফ্ল্যাগগুলো ব্যাখ্যা
| ফ্ল্যাগ | কার্য |
|---|---|
SYSTEM_UI_FLAG_IMMERSIVE_STICKY |
স্টিকি ইমার্সিভ মোড - ব্যবহারকারী স্বাইপ করলে বার দেখাবে, কিছুক্ষণ পর আবার হাইড করবে |
SYSTEM_UI_FLAG_HIDE_NAVIGATION |
নেভিগেশন বার (হোম, ব্যাক, রিসেন্ট) হাইড করে |
SYSTEM_UI_FLAG_FULLSCREEN |
স্ট্যাটাস বার হাইড করে |
SYSTEM_UI_FLAG_LAYOUT_STABLE |
লেআউট স্থির রাখে, বার হাইড/শো হলে কন্টেন্ট শিফট হয় না |
SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |
নেভিগেশন বার হাইড থাকাকালিন লেআউট ফুলস্ক্রিন হিসেবে গণ্য |
SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |
স্ট্যাটাস বার হাইড থাকাকালিন লেআউট ফুলস্ক্রিন হিসেবে গণ্য |
উন্নত ইমপ্লিমেন্টেশন (Kotlin + WindowInsets API - API 30+)
আধুনিক অ্যান্ড্রয়েডে (API 30+/Android 11+) WindowInsetsController API ব্যবহার করা উচিত:
// Kotlin উদাহরণ
private fun hideSystemBars() {
val windowInsetsController = window.insetsController
if (windowInsetsController != null) {
windowInsetsController.hide(WindowInsets.Type.systemBars())
windowInsetsController.systemBarsBehavior =
WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
}
}
// Activity-তে
override fun onResume() {
super.onResume()
hideSystemBars()
}
ধাপ ৪: ম্যানিফেস্ট ফাইল
সাধারণ কনফিগারেশন। কোনোพิশেষ পারমিশন দরকার নেই।
সীমাবদ্ধতা এবং সতর্কতা
- নहीं করা যাবে: হোম বাটন পুরোপুরি ডিজেবল করা (সিকিউরিটির কারণে)
- কিὸস মোড (Kiosk Mode): যদি অ্যাপটি কি৸স মোডে চালাতে চান, তবে
DevicePolicyManagerএবংsetLockTaskPackages()ব্যবহার করুন - onWindowFocusChanged: সবসময় এই মেথডে UI ফ্ল্যাগ সেট করুন, কারণ সিস্টেম বার আবার দেখানোর পর ফোকাস ফিরলে পুনরায় হাইড করতে হয়
ফলাফল
অ্যাপ্লিকেশন চালু হলে স্ট্যাটাস বার এবং নেভিগেশন বার হাইড থাকবে। স্ক্রিনের প্রান্ত থেকে স্বাইপ করলে বারগুলো দৃশ্যমান হবে, কিছুক্ষণ পর আবার হাইড হয়ে যাবে।