लॉलीपॉप: स्टेटसबार को पीछे छोड़ दें क्योंकि इसका रंग पारदर्शी है


142

मैंने अपना स्टेटसबार रंग लॉलीपॉप के लिए पारदर्शी करने के लिए सेट किया है, केवल मेरी थीम में निम्न पंक्ति के साथ:

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

अब मुझे इसके पीछे आकर्षित करने की आवश्यकता है, लेकिन मुझे इसके पीछे कोई दृश्य आकर्षित नहीं कर सकता है। मुझे पता है कि इसे windowTranslucentStatusसंपत्ति के साथ कैसे करना है , लेकिन इस संपत्ति का उपयोग नहीं करना चाहते हैं क्योंकि यह तब स्थिति को नजरअंदाज कर देगा, जो पारदर्शी पर सेट है।


2
आप यह भी उपयोग कर सकते हैंandroid:fitsSystemWindows="true"
एज़निक्स

जवाबों:


385

विधि # 1:

पूरी तरह से पारदर्शी स्थिति पट्टी प्राप्त करने के लिए, आपको उपयोग करना होगा statusBarColor, जो केवल एपीआई 21 और इसके बाद के संस्करण पर उपलब्ध है। windowTranslucentStatusएपीआई 19 और इसके बाद के संस्करण पर उपलब्ध है, लेकिन यह स्थिति पट्टी के लिए एक रंगा हुआ पृष्ठभूमि जोड़ता है। हालाँकि, सेटिंग windowTranslucentStatusएक चीज़ को प्राप्त करती है जो कि statusBarColorपारदर्शी में नहीं बदलती : यह सेट SYSTEM_UI_FLAG_LAYOUT_STABLE और SYSTEM_UI_FLAG_LAYOUT_FULLSCREENझंडे को सेट करती है । समान प्रभाव प्राप्त करने का सबसे आसान तरीका मैन्युअल रूप से इन झंडे को सेट करना है, जो प्रभावी रूप से एंड्रॉइड लेआउट सिस्टम द्वारा लगाए गए इनसेट को निष्क्रिय कर देता है और आपको अपने लिए छोड़ देता है।

आप इस onCreateविधि को अपनी विधि में कहते हैं:

getWindow().getDecorView().setSystemUiVisibility(
    View.SYSTEM_UI_FLAG_LAYOUT_STABLE
    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);

/Res/values-v21/styles.xml में पारदर्शिता सेट करना सुनिश्चित करें:

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

या प्रोग्रामेटिकली पारदर्शिता सेट करें:

getWindow().setStatusBarColor(Color.TRANSPARENT);

इस दृष्टिकोण का अच्छा पक्ष यह है कि एपीआई लेआउट 19 पर समान लेआउट और डिज़ाइन का उपयोग टिंटेड पारभासी स्थिति पट्टी के लिए पारदर्शी स्थिति पट्टी का व्यापार करके भी किया जा सकता है।

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

विधि # 2:

यदि आपको केवल अपने स्टेटस बार के तहत एक बैकग्राउंड इमेज को पेंट करने की आवश्यकता है, तो इसके पीछे एक दृश्य की स्थिति के बजाय, यह आपकी गतिविधि की थीम की पृष्ठभूमि को वांछित इमेज में सेट करके और स्टेट बार की पारदर्शिता को सेट करने के द्वारा किया जा सकता है जैसा कि विधि # में दिखाया गया है। 1। यह वह तरीका था जिसका इस्तेमाल मैंने कुछ महीने पहले से एंड्रॉइड पुलिस लेख के लिए स्क्रीनशॉट बनाने के लिए किया था।

विधि # 3:

यदि आपको कुछ लेआउट के लिए मानक सिस्टम इनसेट्स को अनदेखा करना पड़ा है, जबकि उन्हें दूसरों में काम करते हुए रखा जाता है, तो ऐसा करने का एकमात्र व्यवहार्य अक्सर जुड़े हुए ScrimInsetsFrameLayoutवर्ग के साथ काम करना है । बेशक, उस वर्ग में किए गए कुछ चीजें सभी परिदृश्यों के लिए आवश्यक नहीं हैं। उदाहरण के लिए, यदि आप सिंथेटिक स्टेटस बार ओवरले का उपयोग करने की योजना नहीं बनाते हैं, तो बस init()विधि में सब कुछ बताएं और attrs.xml फ़ाइल में कुछ भी जोड़ने से परेशान न हों। मैंने इस दृष्टिकोण को काम करते देखा है, लेकिन मुझे लगता है कि आप पाएंगे कि यह कुछ अन्य निहितार्थ लाता है जो कि बहुत सारे काम हो सकते हैं।

मैंने यह भी देखा कि आप कई लेआउट लपेटने का विरोध कर रहे हैं। एक लेआउट को दूसरे के अंदर लपेटने के मामले में, जहां दोनों की match_parentऊंचाई और चौड़ाई होती है, प्रदर्शन के निहितार्थ चिंता करने के लिए बहुत तुच्छ हैं। भले ही, आप उस स्थिति को पूरी तरह से बदल सकते हैं जिस वर्ग को वह FrameLayoutअपनी पसंद के किसी अन्य प्रकार के लेआउट वर्ग से बढ़ाता है । यह ठीक काम करेगा।


9
बहुत बहुत धन्यवाद, SYSTEM_UI_FLAG_LAYOUT_STABLEऔर SYSTEM_UI_FLAG_LAYOUT_FULLSCREENझंडे स्थापित करना वह समाधान था जिसकी मुझे तलाश थी।
अलैक्सम्स

3
मैंने एक महीने के लिए आपका पहला समाधान खोजा। धन्यवाद!
नियोक्री

1
नमस्ते। आपका कोड पूरी तरह से ठीक काम करता है। लेकिन जब मैं टुकड़े से बाहर निकलता हूं, तो मुझे रोलबैक कैसे बदलना चाहिए?
TheonlyAnil

3
यह साथ काम नहीं करता है CollapsingToolbarLayoutऔर Toolbar: स्टेटस बार पूरी तरह से पारभासी नहीं रहता है और इसका android:statusBarColorकोई प्रभाव नहीं पड़ता है
कोन्सटेंटिन कोनपोको

धन्यवाद। यदि आप एक गैर-फ़ुलस्क्रीन गतिविधि पर वापस लौटना चाहते हैं, तो डेवलपर .sonymobile.com/knowledge-base/tutorials/… पढ़ें ।
कूलमाइंड

43

इसने मेरे केस के लिए काम किया


// Create/Set toolbar as actionbar
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

// Check if the version of Android is Lollipop or higher
if (Build.VERSION.SDK_INT >= 21) {

    // Set the status bar to dark-semi-transparentish
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,
            WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

    // Set paddingTop of toolbar to height of status bar.
    // Fixes statusbar covers toolbar issue
    toolbar.setPadding(0, getStatusBarHeight(), 0, 0);
}

// A method to find height of the status bar
public int getStatusBarHeight() {
    int result = 0;
    int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
    if (resourceId > 0) {
        result = getResources().getDimensionPixelSize(resourceId);
    }
    return result;
}

स्टेटसबार के साथ काम करने के बारे में अधिक जानकारी के लिए: youtube.com/watch?v=_mGDMVRO3iE



@TheOnlyAnil एक निश्चित टूलबार की ऊँचाई को परिभाषित करता है :) "56dp" या तो अच्छा दिखना चाहिए
माइकल

4
इस तरह से स्थिति बार ऊंचाई प्राप्त करना पूरी तरह से असमर्थित, अनिर्दिष्ट है, और निश्चित रूप से भविष्य के संस्करणों में टूट जाएगा। इसके बजाय FitSystemWindows = "true" का उपयोग करें।
ग्रेग एननिस

1
वैसे मैं यह भी कर रहा हूँ क्योंकि कभी-कभी आपको बस करना पड़ता है।
ग्रेग एनिस

2
इस बात में क्रिस बान्स (Google इंजीनियर) के अनुसार यह बहुत बुरा विचार है: youtube.com/watch?v=_mGDMVRO3iE
मार्टिन मार्कोसिनी

1
@ मिचेल एफडब्ल्यूआईडब्ल्यू, मैंने इसे अतीत में किया है और विंडोइन्सेट्स एपी (विधि) ऐसा करने के लिए "सरल होना चाहिए और हमारे बारे में सोचने के बिना किया जाना चाहिए", लेकिन ऐसा नहीं है, यह एक लंगड़ा बेकार एपीआई है जो इसे जोड़ता है बहुत सारे अनावश्यक ओवरहेड। Google हमेशा 80% पूर्ण है और अंतिम 20% भाग को छोड़ देता है ... जो सभी तरह से हैक करते हैं जब तक कि वे ऐसा नहीं करते। ¯_ (¯) _ / ¯
मार्टिन मार्कोनी

21

इस विषय का प्रयास करें

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="colorPrimaryDark">@android:color/transparent</item>
    <item name="colorPrimary">@color/md_blue_200</item>
    <item name="android:windowDrawsSystemBarBackgrounds">true</item>
    <item name="android:statusBarColor">@android:color/transparent</item>
    <item name="android:windowTranslucentStatus">true</item>
</style>

सुनिश्चित करें कि, आपका लेआउट सेट है

android:fitsSystemWindows="false"

4
सेटिंग android:fitsSystemWindows="false"टूलबार को आधे में काट रहा है।
हम्मीर नासिर

16

के बजाय

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

निम्न का उपयोग करें:

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

और अपने 'MainActivity' लेआउट पर शीर्ष पैडिंग (जिसे डिफ़ॉल्ट रूप से जोड़ा जाता है) को निकालना सुनिश्चित करें।

ध्यान दें कि यह स्थिति पट्टी को पूरी तरह से पारदर्शी नहीं बनाता है, और आपकी स्थिति पट्टी पर "फीका हुआ काला" ओवरले होगा।


2
उपयोग करते समय <item name="android:windowTranslucentStatus">true</item>, यह एंड्रॉइड को स्टेटस बार के नीचे एक फीका काली पृष्ठभूमि डालता है जो कि मैं नहीं देख रहा हूं। किसी भी तरह से हालांकि इस काले फीका पृष्ठभूमि नहीं है?
alxscms

1
मैंने कई चीजों की कोशिश की है, लेकिन मुझे फीकी काली पृष्ठभूमि को हटाने का कोई तरीका नहीं मिल रहा है। इसलिए मैं यह कहकर अपने शोध को समाप्त कर रहा हूं कि यह एंड्रॉइड पर संभव नहीं है (यहां तक ​​कि स्क्रिमलैयूट के साथ भी नहीं)। इस तरह का अर्थ है, क्योंकि यह हर समय आपके स्टेटस बार की उचित पठनीयता सुनिश्चित करता है। मैं अपना उत्तर अपडेट करूंगा।
जीरो मोलस

मुझे लगता है कि स्थिति पट्टी के लिए पारदर्शी रंग डालने में सक्षम होने के लिए यह बहुत अजीब होगा, इसके पीछे खींचने में सक्षम होने के बिना। मैं समझता हूं कि आप यह क्यों कहते हैं कि यह समझ में आता है कि आप इस काले फीके बैकग्राउंड को नहीं हटा सकते, लेकिन यह निश्चित रूप से मुश्किल नहीं है कि स्टेटस बार आइकन को बनाए रखने के लिए पर्याप्त सावधानी बरती जाए। यहाँ Android पुलिस का एक लेख दिखाया गया है जिसमें पारदर्शी स्थिति पट्टी androidpolice.com/2014/07/04/… का उपयोग दिखाया गया है । मैं लेखक से संपर्क करने की कोशिश करूंगा।
१०

1
आशा है कि आप उसके संपर्क में आ सकते हैं। मुझे यह करने में बहुत रूचि हो रही है :)
जीरो मोल्स

महान! मेरे उत्तर को भी अपडेट किया।
जीरो मोलेंस

9

कोडी टॉम्ब्स के समाधान ने मेरे लिए लगभग चाल चली । मुझे यकीन नहीं है कि यह ज़ामरीन से संबंधित है या नहीं, लेकिन मेरे पास अब एक स्वीकार्य समाधान है:

उदाहरण

यह मेरा सेटअप है:

मेरे पास एक Android परियोजना है जहाँ मैंने Android.Support v4 और v7 संकुल को संदर्भित किया है। मेरी दो शैलियाँ हैं:

मान / styles.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<resources>
    <style name="MyStyle" parent="@style/Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowTranslucentStatus">true</item>
    </style>
</resources>

मान-V21 / styles.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<resources>
    <style name="MyStyle" parent="@style/Theme.AppCompat.Light.NoActionBar">
        <item name="android:statusBarColor">@android:color/transparent</item>
    </style>
</resources>

AndroidManifest लक्ष्य "MyStyle":

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.agn.test.test">
    <uses-sdk android:minSdkVersion="10" />
    <application android:allowBackup="true" android:icon="@mipmap/icon" android:label="@string/app_name" android:theme="@style/MyStyle">
    </application>
</manifest>

और अंत में मुख्य गतिविधि में कोड:

[Activity (Label = "Test", MainLauncher = true, Icon = "@mipmap/icon")]
public class MainActivity : Activity
{
    protected override void OnCreate (Bundle savedInstanceState)
    {
        base.OnCreate (savedInstanceState);

        SetContentView (Resource.Layout.Main);
        //Resource.Layout.Main is just a regular layout, no additional flags. Make sure there is something in there like an imageView, so that you can see the overlay.

        var uiOptions = (int)Window.DecorView.SystemUiVisibility;
        uiOptions ^= (int)SystemUiFlags.LayoutStable;
        uiOptions ^= (int)SystemUiFlags.LayoutFullscreen;
        Window.DecorView.SystemUiVisibility = (StatusBarVisibility)uiOptions;

        Window.AddFlags (WindowManagerFlags.DrawsSystemBarBackgrounds);
    }
}

ध्यान दें कि मैंने DrawsSystemBarBackgrounds ध्वज सेट किया है, इससे सभी अंतर होते हैं

Window.AddFlags (WindowManagerFlags.DrawsSystemBarBackgrounds); 

मैंने इसे सही होने में बहुत समय लगाया, वास्तव में बहुत अधिक समय। उम्मीद है कि यह उत्तर किसी को भी उसी चीज को प्राप्त करने की कोशिश करने में मदद करता है।


1
android:windowTranslucentStatusएपीआई स्तर 19 या इसके बाद के संस्करण की आवश्यकता होती है, यह कैसे संभव है कि आप इसे अपने मूल्यों / शैलियों पर उपयोग कर रहे हैं android:minSdkVersion। 10 के एक होने के दौरान xml ?
mradzinski

7

@Cody Toombs का जवाब एक ऐसे मुद्दे को जन्म देता है जो नेविगेशन बार के पीछे लेआउट को लाता है। इसलिए मैंने जो पाया वह @Kriti द्वारा दिए गए इस समाधान का उपयोग कर रहा है

यहाँ उसी के लिए कोटलिन कोड स्निपेट है:

if (Build.VERSION.SDK_INT >= 19 && Build.VERSION.SDK_INT < 21) {
    setWindowFlag(this, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, true)
}

if (Build.VERSION.SDK_INT >= 19) {
    window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
}

if (Build.VERSION.SDK_INT >= 21) {
    setWindowFlag(this, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, false)
    getWindow().setStatusBarColor(Color.TRANSPARENT)
}

private fun setWindowFlag(activity: Activity, bits: Int, on: Boolean) {

    val win: Window = activity.getWindow()

    val winParams: WindowManager.LayoutParams = win.getAttributes()
    if (on) {
        winParams.flags = winParams.flags or bits
    } else {
        winParams.flags = winParams.flags and bits.inv()
    }
    win.setAttributes(winParams)
}

आपको भी जोड़ना होगा

android:fitsSystemWindows="false"

अपने लेआउट का मूल दृश्य।


3

मुझे भी यही समस्या थी इसलिए मैं ImageView बनाऊं जो स्टेटस बार एपीआई 19+ से पीछे हो

स्थिति बार gist.github.com के पीछे कस्टम छवि सेट करें

public static void setTransparent(Activity activity, int imageRes) {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
        return;
    }
    // set flags
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
        activity.getWindow().setStatusBarColor(Color.TRANSPARENT);
    } else {
        activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    }

    // get root content of system window
    //ViewGroup rootView = (ViewGroup) ((ViewGroup) activity.findViewById(android.R.id.content)).getChildAt(0);
    // rootView.setFitsSystemWindows(true);
    // rootView.setClipToPadding(true);

    ViewGroup contentView = (ViewGroup) activity.findViewById(android.R.id.content);
    if (contentView.getChildCount() > 1) {
        contentView.removeViewAt(1);
    }

    // get status bar height
    int res = activity.getResources().getIdentifier("status_bar_height", "dimen", "android");
    int height = 0;
    if (res != 0)
        height = activity.getResources().getDimensionPixelSize(res);

    // create new imageview and set resource id
    ImageView image = new ImageView(activity);
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, height);
    image.setLayoutParams(params);
    image.setImageResource(imageRes);
    image.setScaleType(ScaleType.MATRIX);

    // add image view to content view
    contentView.addView(image);
    // rootView.setFitsSystemWindows(true);

}

2

आप ScrimInsetFrameLayout का उपयोग कर सकते हैं

https://github.com/google/iosched/blob/master/android/src/main/java/com/google/samples/apps/iosched/ui/widget/ScrimInsetsFrameLayout.java

android: fitSystemWindows = "true" स्क्रिम लेआउट पर सेट होना चाहिए!


मैंने उस वर्ग को देखा, लेकिन क्या होगा अगर मैं RelativeLayoutइसके बजाय उपयोग करना चाहता हूं FrameLayout?
alxscms 14

3
एक तामचीनी के अंदर रिश्तेदार लेआउट का उपयोग करें।
मुर्तजा खुर्शीद हुसैन

2
लेआउट में घोंसले के शिकार निश्चित रूप से प्रदर्शन के संबंध में मेरे लिए एक समाधान नहीं है
अल्क्सस्कम्स

1
ऐप का प्रदर्शन कई चीजों पर निर्भर करता है जो अलग-अलग हो सकते हैं। अगर आपके पास कोई रास्ता नहीं है तो इसे आज़माएं। बेस्ट ऑफ लक
मुर्तजा खुर्शीद हुसैन

मुझे वह मिलता है जो आप का मतलब है, लेकिन एक और समाधान होना चाहिए, अगर हो सकता है कि इस कस्टम फ्रेम लेआउट में लागू किए गए किसी भी लेआउट पर लागू करने का कोई तरीका न हो। लेकिन किसी भी तरह से धन्यवाद
alxscms

1

पोस्ट किए गए कुछ समाधानों के समान, लेकिन मेरे मामले में मैंने स्टेटस बार को पारदर्शी बनाया और कुछ नकारात्मक मार्जिन के साथ एक्शन बार की स्थिति को ठीक किया

if (Build.VERSION.SDK_INT >= 21) {
    getWindow().setStatusBarColor(Color.TRANSPARENT);
    FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) toolbar.getLayoutParams();
    lp.setMargins(0, -getStatusBarHeight(), 0, 0);
}

और मैंने टूलबार और रूट दृश्य में उपयोग किया

android:fitsSystemWindows="true"

1
getStatusBarHeight () मानक नहीं है
Roel

यह विधि @ माइक-मिल से समाधान पर लागू की जाती है ... सार्वजनिक int getStatusBarHeight () {inty = 0; int resourceId = getResources ()। getIdentifier ("status_bar_height", "dimen", "android"); if (resourceId> 0) {result = getResources ()। getDimensionPixelSize (resourceId); } वापसी परिणाम; }
jegumi

धन्यवाद। मैंने ऐसा किया: AppBarLayout.LayoutParams lp = (AppBarLayout.LayoutParams) toolbar.getLayoutParams (); lp.topMargin + = getStatusBarHeight ();
कूलमाइंड

1

@Laobie से अच्छी लाइब्रेरी StatusBarUtil है जो आसानी से StatusBar में छवि बनाने में मदद करती है।

बस अपने में जोड़ें build.gradle:

compile 'com.jaeger.statusbarutil:library:1.4.0'

फिर गतिविधि सेट में

StatusBarUtil.setTranslucentForImageView(Activity activity, int statusBarAlpha, View viewNeedOffset)

लेआउट में

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white"
    android:orientation="vertical">

    <ImageView
        android:layout_alignParentTop="true"
        android:layout_width="match_parent"
        android:adjustViewBounds="true"
        android:layout_height="wrap_content"
        android:src="@drawable/toolbar_bg"/>

    <android.support.design.widget.CoordinatorLayout
        android:id="@+id/view_need_offset"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="@android:color/transparent"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
            app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/>

        <!-- Your layout code -->
    </android.support.design.widget.CoordinatorLayout>
</RelativeLayout>

अधिक जानकारी के लिए जीथब पेज से डेमो या क्लोन डाउनलोड करें और सभी फीचर के साथ खेलें।

नोट: किटकैट और इसके बाद के संस्करण का समर्थन करें।

आशा है कि किसी और की मदद करता है!


0

Android Studio 1.4 के साथ, बॉयलर प्लेट कोड के साथ टेम्प्लेट प्रोजेक्ट Overlayआपके AppbarLayout और / या टूलबार पर थीम सेट करता है । वे fitSystemWindowविशेषता = true द्वारा स्थिति पट्टी के पीछे प्रदान करने के लिए भी सेट हैं । यह केवल टूलबार को सीधे स्टेटस बार के नीचे रेंडर करने का कारण बनेगा और बाकी सब टूलबार के नीचे प्रदान किया जाएगा। तो ऊपर दिए गए समाधान अपने दम पर काम नहीं करेंगे। आपको निम्नलिखित परिवर्तन करने होंगे।

  • ओवरले थीम निकालें या टूलबार के लिए इसे गैर ओवरले थीम में बदलें।
  • अपनी शैली -21.xml फ़ाइल में निम्न कोड डालें

    @Android: रंग / पारदर्शी

  • इस थीम को AndroidManifest.xml फ़ाइल में नेविगेशन ड्रॉअर वाली गतिविधि को असाइन करें ।

यह पारदर्शी स्थिति पट्टी के पीछे रेंडर करने के लिए नेविगेशन ड्रावर बना देगा।


0

आपको बस इन गुणों को अपनी थीम में सेट करना है

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

1
मुझे पूरा यकीन है कि यह यूआई नेविगेशन बटन (ऑन-स्क्रीन नेविगेशन वाले डिवाइस) के नीचे आपका लेआउट गिर जाएगा। इसने हमारे ऐप में निचले नेविगेशन दृश्य को दुर्गम बना दिया है, इसलिए हमने नेक्सस पर परीक्षण के बाद इन झंडों को
खोद दिया

0

स्वीकृत जवाब ने मेरे लिए CollapsingToolbarLayout का उपयोग करके काम किया। हालांकि यह नोट करना महत्वपूर्ण है, कि setSytstemUiVisibility()उस फ़ंक्शन के लिए किसी भी पिछले कॉल को ओवरराइड करता है। इसलिए यदि आप उसी दृश्य के लिए कहीं और उस फ़ंक्शन का उपयोग कर रहे हैं, तो आपको View.SYSTEM_UI_FLAG_LAYOUT_STABLEऔर View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREENझंडे शामिल करने की आवश्यकता है , या उन्हें नए कॉल के साथ ओवरराइड किया जाएगा।

मेरे लिए यह मामला था, और एक बार मैंने दोनों झंडों को दूसरी जगह जोड़ दिया, जहां मैं एक कॉल कर रहा था setSystemUiVisibility(), स्वीकृत उत्तर पूरी तरह से काम कर रहा था ।


0

मैं यहाँ कुछ और जानकारी जोड़ रहा हूँ। नवीनतम एंड्रॉइड विकास ने स्टेटस बार में बहुत सारे मामलों को संभालना बहुत आसान बना दिया है। निम्नलिखित मेरी टिप्पणियों से हैंstyles.xml

  1. पृष्ठभूमि का रंग : एसडीके 21+ के लिए, बहुत सारे उत्तरों के रूप में, <item name="android:windowTranslucentStatus">true</item> स्थिति पट्टी को पारदर्शी बना देगा और यूआई के सामने दिखाएगा। आपकी गतिविधि शीर्ष के पूरे स्थान को ले जाएगी।
  2. पृष्ठभूमि का रंग : फिर से, एसडीके 21+ के लिए, <item name="android:statusBarColor">@color/your_color</item>बस किसी और चीज को प्रभावित किए बिना, आपके स्टेटस बार को एक रंग देगा।

  3. हालांकि, बाद के उपकरणों (एंड्रॉइड एम / +) में, आइकन अलग-अलग रंगों में आने लगे। यदि आप फ़ोल्डर styles.xmlमें अपनी फ़ाइल को ओवरराइड करते हैं values-23और जोड़ते हैं , तो OS एसडीके 23 / + के आइकन के लिए ग्रे का गहरा शेड दे सकता है <item name="android:windowLightStatusBar">true</item>
    इस तरह, आप अपने उपयोगकर्ता को एक अधिक दृश्यमान स्थिति पट्टी प्रदान करेंगे, यदि आपकी स्थिति पट्टी में एक हल्का रंग है (यह सोचें कि बहुत सारे Google एप्लिकेशन में हल्की पृष्ठभूमि है, फिर भी आइकन एक ग्रे रंग में दिखाई देते हैं)।
    मैं आपको इसका उपयोग करने का सुझाव दूंगा, यदि आप बिंदु # 2 के माध्यम से अपनी स्थिति पट्टी को रंग दे रहे हैं

  4. सबसे हाल के उपकरणों में, एसडीके 29 / + उपयोगकर्ता द्वारा चलाया जाने वाला एक सिस्टम वाइड लाइट और डार्क थीम के साथ आता है। देवों के रूप में, हमें values-nightउपयोगकर्ता 2 अलग-अलग अनुभव देने के लिए हमारी शैली फ़ाइल को एक नए फ़ोल्डर में ओवरराइड करना चाहिए ।
    यहाँ फिर से, मैंने "# स्थिति पट्टी को पृष्ठभूमि रंग" प्रदान करने में बिंदु # 2 को प्रभावी पाया है। लेकिन सिस्टम मेरे ऐप के लिए स्टेटस बार आइकन का रंग नहीं बदल रहा था। चूंकि मेरे स्टाइल के दिन के संस्करण में लाइटर थीम शामिल है, इसका मतलब है कि उपयोगकर्ता कम दृश्यता (लाइटर पृष्ठभूमि पर सफेद आइकन) से पीड़ित होंगे।
    यह समस्या # 3 दृष्टिकोण या values-29फ़ोल्डर में शैली फ़ाइल को ओवरराइड करके और एक नए का उपयोग करके हल की जा सकती है आपी <item name="android:enforceStatusBarContrast">true</item>। यह स्वचालित रूप से आइकन के लिए ग्रे टिंट को लागू करेगा, अगर आपकी पृष्ठभूमि का रंग बहुत हल्का है।


-1

इस विषय को मैं इसे पूरा करने के लिए उपयोग कर रहा हूं:

<style name="AppTheme" parent="@android:style/Theme.NoTitleBar">

    <!-- Default Background Screen -->
    <item name="android:background">@color/default_blue</item>
    <item name="android:windowTranslucentStatus">true</item>

</style>

1
कुछ अजीब डाउनवॉटर हैं। यहां तक ​​कि अगर एक समाधान आप और कुछ अन्य के लिए सही था, तो वे किसी अन्य उत्तर को पारित करने के बजाय डाउनवोट करेंगे।
कूलमाइंड

मैं जो कुछ भी पूछ रहा हूं वह स्पष्टीकरण है। मुझे नहीं लगता कि लोगों को स्पष्टीकरण के बिना नीचा दिखाने में सक्षम होना चाहिए।
ड्रॉयड क्रिस

मैं भी ऐसा ही सोचता हूं।
कूलमाइंड

मैं समझाता हूं कि पृष्ठभूमि का विकल्प इस बंडल में सही ढंग से काम नहीं करता है। कृपया अपना उत्तर सही करें।
मोरोज़ोव

हम्म् ... आप Android के किस संस्करण में ऐसा कर रहे हैं? मैं एंड्रॉइड एम में इस कॉन्फ़िगरेशन का उपयोग कर रहा हूं
Droid Chris

-3

दाईं ओर समाधान नीचे दी गई शैली में अपनी गतिविधि टैग के तहत XML में एक संपत्ति को बदलने के लिए है। यह सिर्फ काम करता है

  android:theme="@style/Theme.AppCompat.Light.NoActionBar"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.