एंड्रॉइड में स्टेटस बार का रंग कैसे बदलें?


427

सबसे पहले यह डुप्लिकेट नहीं है कि एंड्रॉइड स्टेटस बार की पृष्ठभूमि का रंग कैसे बदलना है

मैं स्थिति बार का रंग कैसे बदलूं जो नेविगेशन बार में समान होना चाहिए।

मैं चाहता हूं कि स्टेटस बार का रंग नेविगेशन बार के रंग जैसा ही हो

यहां छवि विवरण दर्ज करें


2
यह केवल किटकैट @ मर्कबुइकेमा के बाद ही संभव है
कोडर्कैट

4
जैसा कि नील्स ने सुझाव दिया है, वहाँ एक THEME ATTRIBUTE है क्योंकि v21 कहा जाता है android:statusBarColor। आप बस इसे जोड़ सकते हैं values-v21/styles.xml
लेविट

@MarkBuikema कैसे रूट एक्सेस से संबंधित है!
स्टेव मोरेट

जवाबों:


624

एंड्रॉइड 5.0 लॉलीपॉप ने मटेरियल डिज़ाइन थीम पेश की जो थीम के colorPrimaryDarkमूल्य के आधार पर स्टेटस बार को स्वचालित रूप से रंगती है।

यह संस्करण 21 से शुरू होने वाले पुस्तकालय समर्थन-v7-appcompat के लिए धन्यवाद डिवाइस प्री-लॉलीपॉप पर समर्थित है । क्रिस बनेस से समर्थन appcompat v21 के बारे में ब्लॉगपोस्ट

यहां छवि विवरण दर्ज करें

आधिकारिक एंड्रॉइड डेवलपर्स वेबसाइट पर सामग्री थीम के बारे में अधिक पढ़ें


29
किसी कारण में colorPrimaryDark विशेषता मेरे लिए काम नहीं करता है। एमुलेटर v21 पर कोशिश की
deviant

3
यह काम करता है कि आपको एमुलेटर पर परिवर्तनों को लेआउट पूर्वावलोकन पर नहीं देखना है [यह वहां नहीं दिखाता है]
माइटियन

6
colorPrimaryDark मेरे लिए API 18 एमुलेटर पर काम नहीं कर रहा है। Appcompat के बारे में जुड़े लेख से: "पुराने प्लेटफ़ॉर्म पर, AppCompat जहाँ संभव हो, रंग थीम का अनुकरण करता है। फिलहाल यह एक्शन बार और कुछ विजेट को रंग देने तक सीमित है।"
एडम जॉन्स

12
स्टेटस बार में फ़ॉन्ट रंग बदलने के बारे में क्या ? डॉक्स उस बारे में कुछ नहीं कहते हैं।
स्कॉट बिग्स

मैंने उसी तरह से कोशिश की। यह सभी उपकरणों में से अधिकांश में पूरी तरह से काम करता है, लेकिन मेरे पास सैमसंग गैलेक्सी एस 4 चल रहा है ओएस 5.0.1 है और इस फोन की स्थिति में बार का रंग काला है। और एक बार मैं किसी अन्य गतिविधि पर जाता हूं और पिछली गतिविधि पर फिर से आता हूं, मेरा स्टेटस बार का रंग ऐप थीम कलर में बदल जाता है। किसी भी कारण से ऐसा क्यों हो रहा है
हितेश कमानी

364

अपडेट करें:

Lollipop:

public abstract void setStatusBarColor (int color)

एपीआई स्तर 21 में जोड़ा गया

एंड्रॉइड लॉलीपॉप अपने साथ अधिक इमर्सिव उपयोगकर्ता अनुभव और Google के साथ तालमेल के लिए आपके ऐप में स्टेटस बार का रंग बदलने की क्षमता लेकर आया है Material Design Guidelines

यहां बताया गया है कि आप किस window.setStatusBarColorतरह से पेश किए गए नए तरीके का उपयोग करके स्थिति पट्टी का रंग बदल सकते हैं API level 21

स्टेटस बार का रंग बदलने के लिए भी विंडो पर दो अतिरिक्त झंडे लगाने की आवश्यकता होती है; आपको FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDSध्वज जोड़ने और साफ़ करने की आवश्यकता हैFLAG_TRANSLUCENT_STATUS

काम कोड:

import android.view.Window;

...

Window window = activity.getWindow();

// clear FLAG_TRANSLUCENT_STATUS flag:
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

// add FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag to the window
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);

// finally change the color
window.setStatusBarColor(ContextCompat.getColor(activity,R.color.my_statusbar_color));

आधिकारिक डेवलपर संदर्भ: setStatusBarColor (int)

उदाहरण: सामग्री-डिजाइन-हर जगह

क्रिस बान्स ब्लॉग- appcompat v21: पूर्व-लॉलीपॉप उपकरणों के लिए सामग्री डिजाइन!

यहां छवि विवरण दर्ज करें

transitionNameदृश्य पृष्ठभूमि के लिए किया जाएगा android:status:background


2
पीछे की संगतता के लिए कोई समाधान?
एडम हर्विट्ज़

के रूप में नील्स द्वारा जवाब में बताया गया है: आप भी विषय / शैली के माध्यम से स्थिति पट्टी रंग सेटिंग से कॉन्फ़िगर कर सकते हैं android:statusBarColorअपने में values-v21/styles.xmlप्रति फ़ाइल androiddocs.com/training/material/theme.html तो जैसे<item name="android:statusBarColor">@color/primary_color</item>
जीएल पश्चिम

4
मैं स्टेटस बार के रंग को सफेद में बदल सकता हूं, लेकिन मैं batery की तरह अधिसूचना आइकन नहीं देख सकता, मैं इसे कैसे हल कर सकता हूं?
MNFS

1
आपको पता नहीं है कि आपने मेरी कितनी मदद की है ..
अभिषेक ध्यानी

222

इसे अपने मान-v21 / style.xml पर रखें, ताकि लॉलीपॉप पर इसे सक्षम किया जा सके:

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light">
        <item name="colorPrimary">@color/color_primary</item>
        <item name="colorPrimaryDark">@color/color_secondary</item>
        <item name="colorAccent">@color/color_accent</item>
        <item name="android:statusBarColor">@color/color_primary</item>
    </style>
</resources>

34
इसके लिए न्यूनतम एपीआई 21
रोमन

49
शायद यही कारण है कि उन्होंने इसे मूल्यों-वी 21 / शैलियों.xml में डालने का सुझाव दिया ;-) लगता है अब तक का सबसे सटीक उत्तर है !!
लेवीय

लेकिन यह अभी भी एक चेतावनी झंडे? !!
निहाल शर्मा

कॉम्पिटिटर के लिए क्या कार्य है? स्टेटस बार
ब्लैकहॉक

targeApiयदि आप एकल शैली फ़ाइल बनाए रखना चाहते हैं तो आप विशेषता जोड़ सकते हैं । संदर्भ stackoverflow.com/a/48565459/4291272 के
फैसल शेख

50

यह बिना किसी लाइब्रेरी के ऐसा करने का बहुत आसान तरीका है: यदि ओएस संस्करण समर्थित नहीं है - किटकैट के तहत - तो कुछ भी नहीं है। मैं यह कदम उठाता हूं:

  1. मेरे xml में मैंने इसे शीर्ष पर जोड़ा:
<View
        android:id="@+id/statusBarBackground"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

तब मैंने यह तरीका बनाया:

 public void setStatusBarColor(View statusBar,int color){
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
           Window w = getWindow();
           w.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
           //status bar height
           int actionBarHeight = getActionBarHeight();
           int statusBarHeight = getStatusBarHeight();
           //action bar height
           statusBar.getLayoutParams().height = actionBarHeight + statusBarHeight;
           statusBar.setBackgroundColor(color);
     }
}

भी आपको उन दोनों तरीकों की आवश्यकता है जो एक्शन बार और स्टेटस बार ऊंचाई पाने के लिए करें:

public int getActionBarHeight() {
    int actionBarHeight = 0;
    TypedValue tv = new TypedValue();
    if (getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true))
    {
       actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data,getResources().getDisplayMetrics());
    }
    return actionBarHeight;
}

public int getStatusBarHeight() {
    int result = 0;
    int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
    if (resourceId > 0) {
        result = getResources().getDimensionPixelSize(resourceId);
    }
    return result;
}

फिर केवल एक चीज जो आपको चाहिए वह है स्थिति पट्टी रंग सेट करने के लिए यह पंक्ति:

setStatusBarColor(findViewById(R.id.statusBarBackground),getResources().getColor(android.R.color.white));

1
मुझे कहां तत्व देखना चाहिए? यह मुख्य लेआउट के शीर्ष पर होना चाहिए?
एमिल रेना एनरिकेज़

हाँ। अपने xml में। इसके शीर्ष पर।
itzhar

सावधानी: केवल Android> = 19 API के लिए कार्य करना। मेरे मामले में मुझे 16 से शुरू होने वाले समर्थन की आवश्यकता है
एंटोन किजिमा

setStatusBarColor (findViewById (android.R.id.statusBarBackground), getResources () getColor (android.R.color.white)।);
AndroidLad

34

जैसा कि @Niels ने कहा कि आपको मूल्यों में जगह लेनी होगी-v21 / styl.xml:

<item name="android:statusBarColor">@color/black</item>

लेकिन tools:targetApi="lollipop"यदि आप एकल स्टाइल चाहते हैं, तो जोड़ें । जैसे:

<item name="android:statusBarColor" tools:targetApi="lollipop">@color/black</item>

3
"TargetApi" के लिए बहुत बहुत धन्यवाद। मुझे अपना विषय कई फाइलों में फैलाना पसंद नहीं है। :)
प्लेक्सस

31

ठीक है, इज़हार समाधान ठीक था लेकिन, व्यक्तिगत रूप से, मैं इस तरह से दिखने वाले कोड से बचने की कोशिश कर रहा हूं:

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
//Do what you need for this SDK
};

साथ ही, मुझे कोड डुप्लिकेट करना भी पसंद नहीं है। आपके उत्तर में मुझे सभी क्रियाकलापों में इस तरह की कोड को जोड़ना होगा:

setStatusBarColor(findViewById(R.id.statusBarBackground),getResources().getColor(android.R.color.white));

इसलिए, मैंने इज़हार समाधान लिया और XML को उसी परिणाम प्राप्त करने के लिए उपयोग किया: StatusBar status_bar.xml के लिए एक लेआउट बनाएँ

<View xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="@dimen/statusBarHeight"
     android:background="@color/primaryColorDark"
     android:elevation="@dimen/statusBarElevation">

ऊँचाई और ऊँचाई की विशेषताओं पर ध्यान दें, ये मूल्यों में निर्धारित किए जाएंगे, v-v19, मान-v21 आगे नीचे होंगे।

इस लेआउट को अपनी गतिविधियों के लेआउट में शामिल करें, जिनमें main_activity.xml शामिल हैं:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/Black" >

<include layout="@layout/status_bar"/>
<include android:id="@+id/app_bar" layout="@layout/app_bar"/>
//The rest of your layout       
</RelativeLayout>

टूलबार के लिए, शीर्ष मार्जिन विशेषता जोड़ें:

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="?android:attr/actionBarSize"
android:background="@color/primaryColor"
app:theme="@style/MyCustomToolBarTheme"
app:popupTheme="@style/ThemeOverlay.AppCompat.Dark"
android:elevation="@dimen/toolbarElevation"
android:layout_marginTop="@dimen/appBarTopMargin"
android:textDirection="ltr"
android:layoutDirection="ltr">

अपने एप्लिकेशनथीम स्टाइल- v19.xml और स्टाइल्स- v21.xml में, विंडोट्रांसक्लाउड एटीआर जोड़ें:

शैलियों- v19.xml, v21:

<resources>
<item name="android:windowTranslucentStatus">true</item>
</resources>

और अंत में, आपके डिमेंस, डिमेंस-वी 19, डिमेन्स-वी 21 पर, टूलबार टॉपमैरिन के लिए मान जोड़ें, और स्टेटस की ऊंचाईहाइट: किटकेैट से कम के लिए डिमेन्स.एक्सएमएल:

<resources>
<dimen name="toolbarElevation">4dp</dimen>
<dimen name="appBarTopMargin">0dp</dimen>
<dimen name="statusBarHeight">0dp</dimen>
</resources>

स्थिति पट्टी की ऊँचाई हमेशा किटकैट और इसके बाद के संस्करण के लिए 24dp डिमेंस- v19.xml है:

<resources>
<dimen name="statusBarHeight">24dp</dimen>
<dimen name="appBarTopMargin">24dp</dimen>
</resources>

Lolipop के लिए dimens-v21.xml, यदि आवश्यक हो तो केवल ऊंचाई जोड़ें:

<resources>
<dimen name="statusBarElevation">4dp</dimen>
</resources>

यह जेलीबीन किटकैट और लॉलीपॉप के लिए परिणाम है:

यहां छवि विवरण दर्ज करें


इसलिए चेक को कोड में डालने के बजाय, आपने इसे XML में डाल दिया है। आप समाधान किटकैट पर काम करेंगे, जैसे उसे मिला।
एंड्रॉयड डेवलपर

26

आप इस सरल कोड का उपयोग कर सकते हैं:

कोटलिन में वन-लाइनर:

window.statusBarColor = ContextCompat.getColor(this, R.color.colorName)

जावा और मैनुअल संस्करण की जांच के साथ मूल उत्तर:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    getWindow().setStatusBarColor(getResources().getColor(R.color.colorAccentDark_light, this.getTheme()));
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    getWindow().setStatusBarColor(getResources().getColor(R.color.colorAccentDark_light));
}

आप इसका उपयोग करके इसे और सरल बना सकते हैं ContextCompatwindow.statusBarColor = ContextCompat.getColor(this, R.color.colorName)
कोटलिन में

जब तक मैंने इसे लिखा, मैंने kotlin की कोशिश नहीं की थी। तब तक आप उत्तर को संपादित नहीं करते हैं और मैं इसे स्वीकार कर सकता हूं :)
moretz

अच्छा विचार। मैंने अपने सुझाव को भविष्य के आगंतुकों के लिए एक आसान संदर्भ के रूप में उत्तर में शामिल किया है
सनडाइपर

स्थिति पट्टी का रंग बिल्ड.VERSION_CODES.M से ऊपर बदल गया। लॉलीपॉप के नीचे काम नहीं करना
मुहम्मद हारिस

@MuhammedHaris यह काम करता है। क्या आप कोटलिन या जावा कोड का उपयोग करते हैं?
स्टेव मोरेट

23

बस रेस / वैल्यू / स्टाइल्स में एक नया थीम बनाएं। xml जहाँ आप "colorPrimaryDark" को बदलते हैं जो कि स्टेटस बार का रंग है:

<style name="AppTheme.GrayStatusBar" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimaryDark">@color/colorGray</item>
</style>

और AndroidManifest.xml में गतिविधि विषय को आप जो चाहते हैं उसे संशोधित करें , अगली गतिविधि पर आप मूल विषय का चयन करके मूल रंग में वापस बदल सकते हैं:

<activity
    android:name=".LoginActivity"
    android:theme="@style/AppTheme.GrayStatusBar" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

इस प्रकार आपका Res / मान / रंग। Xml जैसा दिखना चाहिए:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#3F51B5</color>
    <color name="colorPrimaryDark">#303F9F</color>
    <color name="colorAccent">#c6d6f0</color>
    <color name="colorGray">#757575</color>
</resources>

1
मुझे लगता है कि यह सबसे सरल लेकिन सबसे साफ समाधान है। 21 के न्यूनतम एपीआई स्तर की आवश्यकता नहीं है , बस सरल ओवरराइडिंग है। अधिक वोटों का संरक्षण करता है।
tahsinRupam

नौगट और एपी स्तर पर 19 पर सेट होने पर यह काम नहीं करता था। अगर मैंने एंड्रॉइड: थीम को एप्लिकेशन नोड के तहत प्रकट किया तो यह काम करता है।
AndroidDev

18

उपरोक्त लॉलीपॉप के लिए रंग बदलने के लिए बस इसे अपनी शैलियों में जोड़ें। xml

<item name="android:statusBarColor">@color/statusBarColor</item>

लेकिन याद रखें , यदि आप स्टेटस बार के लिए हल्का रंग रखना चाहते हैं, तो इस लाइन को भी जोड़ें

<item name="android:windowLightStatusBar">true</item>

1
थैंक्स, यह उपयोगी उत्तर भी है।
एंड्रयू ग्रो

16

आप इस फ़ंक्शन के साथ स्थिति बार का रंग बदल सकते हैं। Android L पर काम करने का मतलब है एपीआई 21 और उच्चतर और रंग स्ट्रिंग की आवश्यकता है जैसे "#ffffff"

private void changeStatusBarColor(String color){
    if (Build.VERSION.SDK_INT >= 21) {
        Window window = getWindow();
        window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        window.setStatusBarColor(Color.parseColor(color));
    }
}

15

मेरे पास यह आवश्यकता थी: प्रोग्रामेटिक रूप से स्टेटस बार के रंग को पारदर्शी रखते हुए , नेविगेशन ड्रॉअर को ट्रेजपेरेंट स्टेटस बार को ओवरलैप करने की अनुमति देने के लिए।

मैं एपीआई का उपयोग करके ऐसा नहीं कर सकता

getWindow().setStatusBarColor(ContextCompat.getColor(activity ,R.color.my_statusbar_color)

यदि आप यहां स्टैक में चेक करते हैं तो कोड की उस लाइन से पहले सभी को ओवरफ्लो कर सकते हैं

getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)

मैं इस तरह की स्थिति पट्टी के रंग और पारदर्शिता का प्रबंधन करने में सक्षम हूं :

  • एंड्रॉइड 4: ऐसा बहुत कुछ नहीं है जो आप कर सकते हैं, क्योंकि आप एपीआई से स्टेटस बार के रंग का प्रबंधन नहीं कर सकते हैं ... केवल एक चीज जो आप कर सकते हैं वह है स्टेटस बार को ट्रांसलूसेंट के रूप में सेट करना और स्टेटस के तहत यूआई के एक रंगीन तत्व को स्थानांतरित करना। बार। ऐसा करने के लिए आपको साथ खेलना होगा

    android:fitsSystemWindows="false"

    अपने मुख्य लेआउट में यह आपको स्टेटस बार के तहत लेआउट बनाने की अनुमति देता है। फिर आपको अपने मुख्य लेआउट के शीर्ष के साथ कुछ पैडिंग के साथ खेलने की आवश्यकता है।

  • एंड्रॉइड 5 और इसके बाद के संस्करण: आपको एक शैली को परिभाषित करना होगा

    <item name="android:windowDrawsSystemBarBackgrounds">true</item>
    <item name="android:statusBarColor">@android:color/transparent</item>

    यह नेविगेशन ड्रावर को स्टेटस बार को ओवरलैप करने की अनुमति देता है।

    फिर स्टेटस बार को पारदर्शी रखते हुए रंग बदलने के लिए आपको स्टेटस बार के रंग के साथ सेट करना होगा

    drawerLayout.setStatusBarBackgroundColor(ContextCompat.getColor(activity, R.color.my_statusbar_color))

    जहां drawerLayout को इस तरह परिभाषित किया गया है

    <android.support.v4.widget.DrawerLayout
        android:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true">

इसने मेरे बिना काम किया <item name="android:windowDrawsSystemBarBackgrounds">true</item>। वैसे भी, खोज के दिनों के बाद, मुझे कुछ ऐसा मिला जो वास्तव में काम करता है (फिलहाल लॉलीपॉप पर परीक्षण किया गया)। धन्यवाद
डेनिसगेल जूल

मुझे वही समस्या हो रही थी और आपके जवाब से मुझे इसे हल करने में मदद मिली।
ए। १un

7

ColorPrimary को रंगों में संपादित करें। मान को जिस रंग में आप चाहते हैं कि स्थिति पट्टी में। उदाहरण के लिए:

   <resources>
<color name="colorPrimary">#800000</color> // changes the status bar color to Burgundy
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color>
<color name="red">#FF0000</color>
<color name="white">#FFFFFF</color>
<color name="cream">#fffdd0</color>
<color name="burgundy">#800000</color>


7

स्टेटस बार का रंग बदलने के लिए res/values-v21/styles.xmlऔर स्टेटस बार के रंग पर जाएं

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light">
        <item name="colorPrimary">@color/color_primary</item>
        <item name="colorPrimaryDark">@color/color_secondary</item>
        <item name="colorAccent">@color/color_accent</item>
        <item name="android:statusBarColor">#0000FF</item>
    </style>
</resources>

अरे, क्या आप मेरी मदद कर सकते हैं? मुझे Android के बारे में कोई जानकारी नहीं है और मैं अब सीखना शुरू नहीं कर सकता। मेरे पास एक सरल ऐप है चुड़ैल एक html फ़ाइल चलाता है। मैं स्टेटस बार का रंग बदलने के लिए मर रहा हूं क्योंकि # 000 पर वह ऊपर और नीचे मेरे ताल से भयानक है। लेकिन मैं अभी नहीं कर सकता, मैं भी शैलियों .xml फ़ाइल नहीं मिल सकता है ... अगर मैं तुम्हें अपना apk भेज सकता है और आप इसे मेरे लिए सेट करता हूँ मैं आभारी हो जाएगा!
थियागो सोबरा

6

यदि आप स्थिति बार रंग को प्रोग्रामेटिक रूप से बदलना चाहते हैं (और बशर्ते डिवाइस में एंड्रॉइड 5.0 हो)। यह किसी भी गतिविधि से स्टेटबर्कर को बदलने का एक सरल तरीका है और बहुत आसान तरीके हैं जब अलग-अलग टुकड़ों में अलग-अलग स्टेटस बार का रंग होता है।

 /**
 * @param colorId id of color
 * @param isStatusBarFontDark Light or Dark color
 */
fun updateStatusBarColor(@ColorRes colorId: Int, isStatusBarFontDark: Boolean = true) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        val window = window
        window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
        window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
        window.statusBarColor = ContextCompat.getColor(this, colorId)
        setSystemBarTheme(isStatusBarFontDark)
    }
}

/** Changes the System Bar Theme.  */
@RequiresApi(api = Build.VERSION_CODES.M)
private fun setSystemBarTheme(isStatusBarFontDark: Boolean) {
    // Fetch the current flags.
    val lFlags = window.decorView.systemUiVisibility
    // Update the SystemUiVisibility depending on whether we want a Light or Dark theme.
    window.decorView.systemUiVisibility = if (isStatusBarFontDark) lFlags and View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR.inv() else lFlags or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
}

5

यदि आप एंड्रॉइड 4.4 और इसके बाद के संस्करण पर काम करना चाहते हैं, तो यह प्रयास करें। मैं हरप्रीत के जवाब और इस लिंक का संदर्भ देता हूं। Android और पारदर्शी स्थिति बार

सबसे पहले, गतिविधि की ऑनक्रीट विधि में सेटस्टैटसबार्कोलाइड विधि को कॉल करें (मैंने इसे एक उपयोग वर्ग में रखा)। मैं यहां एक छवि का उपयोग करता हूं, आप इसे एक रंग का उपयोग करने के लिए बदल सकते हैं।

public static void setStatusBarColored(Activity context) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
    {
        Window w = context.getWindow();
        w.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        int statusBarHeight = getStatusBarHeight(context);

        View view = new View(context);
        view.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
        view.getLayoutParams().height = statusBarHeight;
        ((ViewGroup) w.getDecorView()).addView(view);
        view.setBackground(context.getResources().getDrawable(R.drawable.navibg));
    }
}

public static int getStatusBarHeight(Activity context) {
    int result = 0;
    int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
    if (resourceId > 0) {
        result = context.getResources().getDimensionPixelSize(resourceId);
    }
    return result;
}

इससे पहले: इससे पहले

उपरांत: उपरांत

स्टेटस बार का रंग बदल दिया गया है, लेकिन नेवी बार को काट दिया जाता है, इसलिए हमें ऑनक्रिएट विधि में नेवी बार के मार्जिन या ऑफसेट को सेट करने की आवश्यकता है।

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT, (int)(this.getResources().getDimension(R.dimen.navibar_height)));
        layoutParams.setMargins(0, Utils.getStatusBarHeight(this), 0, 0);

        this.findViewById(R.id.linear_navi).setLayoutParams(layoutParams);
    }

फिर स्टेटस बार ऐसा दिखेगा।

स्टेटस बार


4

यह मेरे लिए किटकैट में और अच्छे परिणामों के साथ काम किया है।

public static void setTaskBarColored(Activity context) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
        {
            Window w = context.getWindow();
            w.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            //status bar height
            int statusBarHeight = Utilities.getStatusBarHeight(context);

            View view = new View(context);
            view.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
            view.getLayoutParams().height = statusBarHeight;
            ((ViewGroup) w.getDecorView()).addView(view);
            view.setBackgroundColor(context.getResources().getColor(R.color.colorPrimaryTaskBar));
        }
    }

2

एक और उपाय:

final View decorView = w.getDecorView();
View view = new View(BaseControllerActivity.this);
final int statusBarHeight = UiUtil.getStatusBarHeight(ContextHolder.get());
view.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight));
view.setBackgroundColor(colorValue);
((ViewGroup)decorView).addView(view);

क्या यह टैबलेट्स पर काम करेगा जहां स्क्रीन के नीचे स्टेटस बार है?
guy.gc

6
whats 'w' और 'UiUtil' यहाँ क्या है?
मानव पतादिया

2

बदल colorPrimaryDark res / values / styles.xml फाइल में अपनी इच्छा रंग करने के लिए

    <resources>
        <color name="colorPrimary">#800000</color>
        <color name="colorPrimaryDark">#303F9F</color> //This Line
        <color name="colorAccent">#FF4081</color>
        <color name="red">#FF0000</color>
        <color name="white">#FFFFFF</color>
       <color name="cream">#fffdd0</color>
       <color name="burgundy">#800000</color>
    </resources>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.