जबकि ऊपर दिए गए सभी उत्तर एक ही मौलिक विचार के आसपास घूमते हैं और आप इसे ऊपर दिए गए उदाहरणों का उपयोग करके सरल लेआउट के साथ काम करने के लिए प्राप्त कर सकते हैं। हालाँकि मैं 'फुल स्क्रीन' (टैब बार एक तरफ) खंडन नेविगेशन का उपयोग करते हुए पृष्ठभूमि का रंग बदलना चाहता था और नियमित नेविगेशन, टैब और एक्शन बार बनाए रखता था।
एंटोन हडुतस्की के एक लेख को ध्यान से पढ़ने के बाद मुझे बेहतर समझ थी कि क्या चल रहा है।
मैं DrawerLayout
के साथ ConstraintLayout
(यानी कंटेनर) जो है Toolbar
, मुख्य टुकड़ा और के लिए शामिल हैं BottomNavigationView
।
स्थापना DrawerLayout
होने fitsSystemWindows
सच करने के लिए पर्याप्त नहीं है, तो आप दोनों निर्धारित करने की आवश्यकता DrawerLayout
है और ConstraintLayout
। पारदर्शी स्थिति पट्टी मानकर, स्थिति पट्टी रंग अब पृष्ठभूमि रंग के समान है ConstraintLayout
।
हालाँकि, शामिल किए गए टुकड़े में अभी भी स्टेटस बार इनसेट है, इसलिए टॉप के साथ एक और 'फुल स्क्रीन' टुकड़े को एनिमेट करना स्टेटस बार का रंग नहीं बदलता है।
में संदर्भित किया जाता है लेख से एक छोटा सा कोड Activity
की onCreate
:
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.container)) { view, insets ->
insets.replaceSystemWindowInsets(
insets.systemWindowInsetLeft,
0,
insets.systemWindowInsetRight,
insets.systemWindowInsetBottom
)
}
और सब अच्छा है, सिवाय इसके Toolbar
कि स्थिति पट्टी की ऊँचाई को संबोधित नहीं करता है। कुछ और लेख का जिक्र है और हमारे पास पूरी तरह से काम करने का हल है:
val toolbar = findViewById<Toolbar>(R.id.my_toolbar)
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.container)) { view, insets ->
val params = toolbar.layoutParams as ViewGroup.MarginLayoutParams
params.topMargin = insets.systemWindowInsetTop
toolbar.layoutParams = params
insets.replaceSystemWindowInsets(
insets.systemWindowInsetLeft,
0,
insets.systemWindowInsetRight,
insets.systemWindowInsetBottom
)
}
Main_activity.xml (कृपया ध्यान दें कि Toolbar
पूर्वावलोकन उद्देश्यों के लिए इसमें मार्जिन है, यह कोड द्वारा प्रतिस्थापित किया जाएगा):
<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
>
<androidx.constraintlayout.widget.ConstraintLayout 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:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/green"
android:fitsSystemWindows="true"
tools:context=".MainActivity">
<androidx.appcompat.widget.Toolbar
android:id="@+id/my_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_constraintTop_toTopOf="@id/container"
android:layout_marginTop="26dp"
android:background="@android:color/transparent"
...>
...
</androidx.appcompat.widget.Toolbar>
<include layout="@layout/content_main" />
...
</androidx.constraintlayout.widget.ConstraintLayout>
...
</androidx.drawerlayout.widget.DrawerLayout>
android:fitsSystemWindows="true"
अपनी गतिविधि_मैं.एक्सएमएल में जोड़ी । सिस्टम बार पारभासी हैं और पारदर्शी नहीं हैं।