Window API का उपयोग करके स्टेटस बार रंग बदलना (API 21+)
एंड्रॉइड 5.0 (लॉलीपॉप) से, ऐप्स स्टेटस बार का रंग प्रोग्रामेटिकली या थीम के माध्यम से बदल सकते हैं। यह ऐप की ब्रांडिंग के साथ सुसंगत UI बनाने के लिए उपयोगी है।
चरण 1: नया प्रोजेक्ट बनाएं
Android Studio में प्रोजेक्ट बनाएं (minSdk 21+ अनुशंसित)।
चरण 2: लेआउट फ़ाइल
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:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_marginTop="48dp" <!-- स्टेटस बार ऊंचाई के लिए मार्जिन -->
android:gravity="center"
android:text="स्टेटस बार रंग ऐप थीम से मेल खाता है"
android:textAlignment="center"
android:textSize="18sp"
android:textStyle="bold" />
</RelativeLayout>
चरण 3: MainActivity में प्रोग्रामेटिकली रंग सेट करें
package com.app.sample;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// विधि 1: प्रोग्रामेटिकली (API 21+)
setStatusBarColorProgrammatically();
// विधि 2: थीम के माध्यम से (styles.xml में) - नीचे देखें
}
private void setStatusBarColorProgrammatically() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = getWindow();
// 1. सिस्टम बार बैकग्राउंड ड्रॉ करने की अनुमति दें
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
// 2. ट्रांसलूसेंट स्टेटस बार फ्लैग हटाएं (यदि सेट हो)
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
// 3. स्टेटस बार रंग सेट करें
// विकल्प A: रंग संसाधन से
window.setStatusBarColor(ContextCompat.getColor(this, R.color.colorPrimaryDark));
// विकल्प B: सीधे रंग मान से
// window.setStatusBarColor(Color.parseColor("#00574B"));
// विकल्प C: पारदर्शी स्टेटस बार (कंटेंट पीछे दिखे)
// window.setStatusBarColor(Color.TRANSPARENT);
}
}
}
चरण 4: रंग संसाधन परिभाषित करें
res/values/colors.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#008577</color>
<color name="colorPrimaryDark">#00574B</color> <!-- स्टेटस बार के लिए -->
<color name="colorAccent">#D81B60</color>
<color name="statusBarColor">#00574B</color> <!-- कस्टम स्टेटस बार रंग -->
</resources>
चरण 5: थीम के माध्यम से स्टेटस बार रंग (अनुशंसित)
res/values/styles.xml (या res/values-v21/styles.xml API 21+ के लिए):
<resources>
<!-- बेस थीम -->
<style name="Theme.MyApp" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<!-- API 21+ के लिए स्टेटस बार रंग -->
<style name="Theme.MyApp.StatusBar" parent="Theme.MyApp">
<item name="android:statusBarColor">@color/statusBarColor</item>
<item name="android:navigationBarColor">@color/colorPrimaryDark</item>
<!-- लाइट/डार्क स्टेटस बार आइकन्स (API 23+) -->
<item name="android:windowLightStatusBar">false</item> <!-- true = डार्क आइकन्स -->
</style>
<!-- पारदर्शी स्टेटस बार के लिए (एज-टू-एज) -->
<style name="Theme.MyApp.TransparentStatusBar" parent="Theme.MyApp">
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:windowLightStatusBar">false</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
</style>
</resources>
चरण 6: थीम को एक्टिविटी/ऐप पर लागू करें
AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
package="com.app.sample">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/Theme.MyApp.StatusBar"> <!-- यहाँ थीम लागू करें -->
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
एडवांस्ड: डायनामिक स्टेटस बार रंग (स्क्रॉल पर बदलें)
// NestedScrollView/RecyclerView स्क्रॉल लिस्टनर में
nestedScrollView.setOnScrollChangeListener((v, scrollX, scrollY, oldScrollX, oldScrollY) -> {
if (scrollY > 200) {
// स्क्रॉल होने पर रंग बदलें
window.setStatusBarColor(ContextCompat.getColor(this, R.color.colorPrimaryDark));
} else {
// शीर्ष पर पारदर्शी
window.setStatusBarColor(Color.TRANSPARENT);
}
});
एज-टू-एज डिस्प्ले (एंड्रॉइड 11+ / API 30+)
// आधुनिक WindowInsetsController API
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
WindowInsetsController controller = getWindow().getInsetsController();
if (controller != null) {
// स्टेटस बार रंग
controller.setSystemBarsAppearance(
WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS, // या 0 डार्क के लिए
WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS
);
// या सीधे रंग
getWindow().setStatusBarColor(Color.TRANSPARENT); // पारदर्शी
}
} else {
// लीगेसी
Window window = getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(Color.TRANSPARENT);
window.getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
);
}
स्टेटस बार आइकन रंग (लाइट/डार्क मोड)
| एट्रिब्यूट | API स्तर | प्रभाव |
|---|---|---|
android:windowLightStatusBar | 23+ | true = डार्क आइकन्स (लाइट बैकग्राउंड के लिए), false = लाइट आइकन्स |
android:windowLightNavigationBar | 27+ | नेविगेशन बार आइकन्स के लिए समान |
उपयुक्त सेट करें।