लॉलीपॉप में ऐप से मैच करने के लिए स्टेटस बार का रंग कैसे बदलें? [एंड्रॉयड]


96

नए लॉलीपॉप अपडेट में मैंने देखा कि देशी Google ऐप्स के साथ ऐप पर चल रहे एक्शन बार से मैच करने के लिए स्टेटस बार का रंग बदलता है। मैं देख रहा हूं कि यह ट्विटर ऐप पर भी है इसलिए मैं अनुमान लगा रहा हूं कि यह विशेष रूप से Google नहीं है जो इसे कर सकता है।

क्या किसी को पता है कि यह कैसे करना है अगर यह संभव है?

जवाबों:


221

स्टेटस बार का रंग उपयोग बदलने के लिए setStatusBarColor (int color) का । Javadoc के अनुसार, हमें खिड़की पर कुछ झंडे लगाने की भी जरूरत है।

कोड का कार्य स्निपेट:

Window window = activity.getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.setStatusBarColor(ContextCompat.getColor(activity, R.color.example_color));


सामग्री के डिजाइन के दिशा निर्देशों के अनुसार ध्यान रखें बार का रंग और एक्शन बार का रंग अलग होना चाहिए:

  • ActionBar को प्राथमिक 500 रंग का उपयोग करना चाहिए
  • StatusBar को प्राथमिक 700 रंग का उपयोग करना चाहिए

नीचे स्क्रीनशॉट देखें:

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


4
ध्यान दें कि प्रभाव एमुलेटर में दिखाई नहीं दे सकता है। उदाहरण के लिए, यह नमूना परियोजना एक नेक्सस 9 पर स्थिति बार पर हस्ताक्षर करती है, लेकिन एंड्रॉइड 5.0 एमुलेटर पर नहीं।
कॉमन्सवेयर

1
@मेट: मैं एंड्रॉइड एसडीके एमुलेटर का उल्लेख कर रहा था। यह जानकर अच्छा लगा कि यह Genymotion पर काम कर रहा है।
कॉमन्सवेयर

3
@ आज़ाद नहीं, यह नहीं हुआ। कोड के स्निपेट के ऊपर उपयोग करने के लिए आपको यह सुनिश्चित करना होगा कि आपका उपकरण एपीआई 21 या उच्चतर पर चल रहा है।
किलामत k

1
मैं अपेक्षाकृत सरल परियोजना पर काम कर रहा हूं और मुझे यह कहना होगा कि मैंने अभी-अभी उपयोग किया है getWindow().setStatusBarColor(activity.getResources().getColor(R.color.example_color));और इसने पूरी तरह से काम किया है। उस संदर्भ के बारे में निश्चित नहीं है जिसमें झंडे कड़ाई से आवश्यक हैं।
जोकिन इराचुक

3
मैं प्री लॉलीपॉप डिवाइसों में भी रंग दिखाना चाहता हूं। यह कैसे किया जा सकता है?
13

48

इसे आप शैलियों में जोड़ें। xml ColorPrimary एक्शन बार के लिए है और colorPrimaryDark स्टेटस बार के लिए है।

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="android:colorPrimary">@color/primary</item>
    <item name="android:colorPrimaryDark">@color/primary_dark</item>
</style>

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

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


Android Studio प्रत्येक प्रोजेक्ट के लिए निम्न प्रविष्टियाँ बनाता है: <color name="colorPrimary">#somecolor</color>और <color name="colorPrimaryDark">#somecolor</color>। उन्हें वांछित प्रभाव को प्राप्त करने के लिए बदला जा सकता है।
न्यूरोट्रांसमीटर 21

41

स्टेटस बार का रंग सेट करने का दूसरा तरीका style.xml है

ऐसा करने के लिए, इस सामग्री के साथ Res / मान- v21 फ़ोल्डर के तहत एक style.xml फ़ाइल बनाएं :

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="AppTheme" parent="android:Theme.Material">
        <!--   darker variant for the status bar and contextual app bars -->
        <item name="android:colorPrimaryDark">@color/blue_dark</item>
    </style>
</resources>

संपादित करें: जैसा कि टिप्पणियों में बताया गया है, AppCompat का उपयोग करते समय कोड अलग होता है। इसके स्थान पर फ़ाइल रेस / मान / style.xml उपयोग करें:

<style name="Theme.MyTheme" parent="Theme.AppCompat.Light">   
    <!-- Set AppCompats color theming attrs -->
    <item name="colorPrimary">@color/my_awesome_red</item>
    <item name="colorPrimaryDark">@color/my_awesome_darker_red</item>
    <!-- Other attributes -->
</style>

1
वह किया। लेकिन काम नहीं किया। लेकिन फिर मैं सामग्री के बजाय AppCompat का उपयोग करता हूं।
मार्टिन

3
@ मॉर्टिन एप्कोम्पैट के लिए, एंड्रॉइड उपसर्ग के बिना colorPrimaryDark का उपयोग करें।
Michiel

एप्कोम्पैट के लिए भी काम नहीं कर रहा है (स्तर 18 पर परीक्षण किया गया)
मोहम्मद ज़करालह

स्टेटस बार का रंग केवल OS API Level 21 और इससे ऊपर के उपकरणों पर काम करेगा। इसके अलावा, अपने प्रदर्शन में सुनिश्चित करें कि आप व्यक्तिगत गतिविधियों पर इस शैली को ओवरराइड नहीं कर रहे हैं।
लेवोन

अनुपयुक्तता के लिए ऐप्पल रंग के समान खोजबार का रंग कैसे बदलें
R.Anandan

23

स्थिति बार रंग सेट करने के लिए, इस सामग्री के साथ Res / मान-v21 फ़ोल्डर के तहत एक style.xml फ़ाइल बनाएं:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <style name="AppBaseTheme" parent="AppTheme">
        <item name="android:windowDrawsSystemBarBackgrounds">true</item>
        <item name="android:statusBarColor">@color/blue</item>
    </style>

</resources>

यह कहता है कि प्रतीक windowDrawsSystemBarBackgrounds को हल नहीं कर सकते
jmhostalet

4

यदि आप दो शैली का उपयोग करते हैं तो इस लाइन को v21 की शैली में जोड़ें।

  <item name="android:statusBarColor">#43434f</item>

इस ध्वज की स्थापना के बिना काम नहीं करता हैandroid:windowDrawsSystemBarBackgrounds
स्लाव

4

इसके अलावा अगर आप अलग- status-barअलग गतिविधि के लिए अलग रंग चाहते हैं ( टुकड़े ) के इसे निम्न चरणों के साथ कर सकते हैं (एपीआई 21 और इसके बाद के संस्करण पर काम):

पहले values21/style.xmlनिम्नलिखित कोड बनाएं और डालें:

 <style name="AIO" parent="AIOBase">
            <item name="android:windowDrawsSystemBarBackgrounds">true</item>
            <item name="android:windowContentTransitions">true</item>
    </style>

फिर व्हाइट को परिभाषित करें। अपनी values/style.xmlपसंद के अनुसार डार्क थीम :

 <style name="AIOBase" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="colorPrimary">@color/color_primary</item>
        <item name="colorPrimaryDark">@color/color_primary_dark</item>
        <item name="colorAccent">@color/color_accent</item>
        <item name="android:textColorPrimary">@android:color/black</item>
        <item name="android:statusBarColor" tools:targetApi="lollipop">@color/color_primary_dark
        </item>
        <item name="android:textColor">@color/gray_darkest</item>
        <item name="android:windowBackground">@color/default_bg</item>
        <item name="android:colorBackground">@color/default_bg</item>
    </style>


    <style name="AIO" parent="AIOBase" />

    <style name="AIO.Dark" parent="AIOBase">
        <item name="android:statusBarColor" tools:targetApi="lollipop">#171717
        </item>
    </style>

    <style name="AIO.White" parent="AIOBase">
        <item name="android:statusBarColor" tools:targetApi="lollipop">#bdbdbd
        </item>
    </style>

इसके अलावा अपने में विषयों को लागू करने के लिए मत भूलना manifest.xml


2

एंड्रॉइड प्री लॉलीपॉप डिवाइसों में आप इसे SystemBarTintManager से कर सकते हैं। यदि आप एंड्रॉइड स्टूडियो का उपयोग कर रहे हैं, तो बस अपने ग्रेड फ़ाइल में Systembartint lib जोड़ें।

dependencies {
    compile 'com.readystatesoftware.systembartint:systembartint:1.0.3'
    ...
}

फिर अपनी गतिविधि में

// create manager instance after the content view is set
SystemBarTintManager mTintManager = new SystemBarTintManager(this);
// enable status bar tint
mTintManager.setStatusBarTintEnabled(true);
mTintManager.setTintColor(getResources().getColor(R.color.blue));
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.