यह उदाहरण दर्शाता है कि Kotlin में इमर्सिव मोड (Immersive Mode) का उपयोग करके नेविगेशन बार (होम, बैक, रीसेंट बटन) और स्टेटस बार को कैसे छुपाया जाता है।
चरण 1: नया प्रोजेक्ट बनाएं
Android Studio में File → New Project, भाषा Kotlin चुनें।
चरण 2: लेआउट XML
res/layout/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"
tools:context=".MainActivity">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="50dp"
android:padding="8dp"
android:text="Tutorials Point"
android:textColor="@color/colorPrimaryDark"
android:textSize="48sp"
android:textStyle="bold" />
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:text="होम और सिस्टम बटन छुपाए गए"
android:textAlignment="center"
android:textColor="@android:color/background_dark"
android:textSize="24sp"
android:textStyle="bold" />
</RelativeLayout>
चरण 3: MainActivity.kt
package com.app.sample
import android.os.Bundle
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import java.util.Timer
import java.util.TimerTask
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
title = "KotlinApp"
}
override fun onWindowFocusChanged(hasFocus: Boolean) {
super.onWindowFocusChanged(hasFocus)
if (hasFocus) hideNavigationBar()
}
private fun hideNavigationBar() {
val decorView = window.decorView
val uiOptions = (View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
or View.SYSTEM_UI_FLAG_FULLSCREEN
or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY) // स्टिकी इमर्सिव जोड़ें
decorView.systemUiVisibility = uiOptions
// मूल कोड में टाइमर था जो हर 2ms में UI फ्लैग सेट करता था - यह बैटरी खाता है
// बेहतर: SYSTEM_UI_FLAG_IMMERSIVE_STICKY उपयोग करें जो ऑटो-हाइड हैंडल करता है
}
}
महत्वपूर्ण सुधार
- मूल कोड में
Timerहर 2ms में UI फ्लैग सेट कर रहा था - यह बहुत खराब प्रैक्टिस है (बैटरी ड्रेन, UI जैंक) SYSTEM_UI_FLAG_IMMERSIVE_STICKYफ्लैग जोड़ा गया - यह सिस्टम को स्वाइप से बार दिखाने और ऑटो-हाइड करने देता हैonWindowFocusChangedमें फोकस चेक जोड़ा गया
मॉडर्न API (Android 11+/API 30+): WindowInsetsController
// Activity में
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
window.insetsController?.apply {
hide(WindowInsets.Type.systemBars())
systemBarsBehavior = WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
}
} else {
hideNavigationBarLegacy()
}
}
चरण 4: AndroidManifest.xml
मानक मैनिफेस्ट। फुलस्क्रीन थीम के लिए:
<activity
android:name=".MainActivity"
android:theme="@style/Theme.AppCompat.Light.NoActionBar.FullScreen">
<intent-filter> ... </intent-filter>
</activity>
ऐप चलाएं
डिवाइस कनेक्ट करें, Run करें। नेविगेशन बार और स्टेटस बार छुप जाएंगे। नीचे से स्वाइप करके अस्थायी रूप से दिखाएं।
