android - क्या मैं केवल स्थिति पट्टी के लिए FLAG_LAYOUT_NO_LIMITS सेट कर सकता हूं?




android-5.0-lollipop android-statusbar (7)

मुझे पारदर्शी स्टेटस बार बनाने की जरूरत है। मैं getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS) का उपयोग कर रहा हूं और यह स्थिति पट्टी बनाता है जैसा मैं चाहता हूं। लेकिन यह नेविगेशन बार को भी प्रभावित करता है: यह पारदर्शी हो गया और getWindow().setNavigationBarColor(Color.BLACK) कुछ भी नहीं करते हैं।

क्या केवल पारदर्शी स्थिति पट्टी बनाने का तरीका है और नेविगेशन बार नहीं है?


अंतिम परिणाम कैसा दिखता है यह जांचने के लिए नीचे स्क्रॉल करें

सबसे पहले, अपनी शैलियों को परिभाषित करें। xml कुछ इस तरह से-

styles.xml

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
</style>

निम्नलिखित पंक्ति को जोड़ें

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

एक EditText साथ डायलॉग पर सॉफ्ट कीबोर्ड दिखाए जाने पर उपर्युक्त लाइन को जोड़ना लेआउट को शिफ्ट नहीं करेगा

फिर इस शैली को v21 और v23 शैलियों में इस तरह से ओवरराइड करें-

V21 / styles.xml

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
     <item name="android:windowDrawsSystemBarBackgrounds">false</item>
</style>

v23 / styles.xml

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
     <item name="android:windowDrawsSystemBarBackgrounds">false</item>
</style>

गतिविधि कोड - कोटलिन

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    window.setFlags(
            LayoutParams.FLAG_LAYOUT_NO_LIMITS,
            LayoutParams.FLAG_LAYOUT_NO_LIMITS
    )
    setContentView(R.layout.YOUR_LAYOUT_RESOURCE_ID)
    .
    .
.
}

गतिविधि कोड - जावा

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getWindow().setFlags(
            LayoutParams.FLAG_LAYOUT_NO_LIMITS,
            LayoutParams.FLAG_LAYOUT_NO_LIMITS
    )
    setContentView(R.layout.YOUR_LAYOUT_RESOURCE_ID)
    .
    .
    .
}

अंतिम परिणाम


मैं समाधान भाई पाया

<style name="transparent" parent="Theme.AppCompat.Light.NoActionBar">//AppCompat is the key; You can choose any other theme than the light-theme, but stick to AppCompat
    <item name="android:windowTranslucentStatus">false</item>
    <item name="android:windowDrawsSystemBarBackgrounds">false</item>
    //Other styling(optional)
</style>

और फिर इस पारदर्शी विषय को अपनी गतिविधि के प्रकटन पर लागू करें

 <activity
      ...
      android:theme="@style/transparent"/>

स्टेटस बार और नेविगेशन बार को छिपाने के लिए आप इस तरह का उपयोग कर सकते हैं

WindowManager.LayoutParams attributes = getWindow().getAttributes();
    attributes.flags |= WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS;
    getWindow().setAttributes(attributes);

और नेविगेशनबार दिखाने के लिए फिर से इसका उपयोग करें

   if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION, WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);

    }

रंग मेरे लिए ग्रे है, शायद आप इसे अपने प्राथमिक रंग के लिए मजबूर कर सकते हैं


हाँ, आप इस कोड का उपयोग Style.xml में कर सकते हैं

<style name="transparent" parent="Theme.AppCompat.Light">//AppCompat is the key; You can choose any other theme than the light-theme, but stick to AppCompat

    <item name="colorPrimaryDark">#00000000</item>//THIS is the important part.
    //Other styling(optional)
</style>

फिर इसे अपने लेआउट पर लागू करने के लिए, बस मूल लेआउट में निम्नलिखित पंक्ति जोड़ें (देखें):

android:theme="@style/transparent"

     getWindow().setFlags(
    WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
    WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
)

<style name="TranslucentStatusBar" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowTranslucentStatus">true</item>
</style>


fun showTransparentStatusbar() {
        activity!!.window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN)
    }


    fun removeStatusbarFlags() {
        activity!!.window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
    }

getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);






android-statusbar