Yukarıdaki tüm cevaplar aynı temel fikir etrafında dolaşırken ve yukarıdaki örneklerden birini kullanarak basit düzenlerle çalışmasını sağlayabilirsiniz. Ancak, kayan 'tam ekran' (sekme çubuğu bir yana) parça navigasyonunu kullanırken arka planın rengini değiştirmek ve düzenli gezinme, sekme ve eylem çubuklarını korumak istedim.
Anton Hadutski'nin bir makalesini dikkatle okuduktan sonra neler olduğunu daha iyi anladım.
Ben DrawerLayout
ile ConstraintLayout
olan (yani, kap) Toolbar
, ana fragmanı ve şunları içerir BottomNavigationView
.
Ayar DrawerLayout
sahip fitsSystemWindows
true yeterli değildir, her iki ayarlamanız gerekir DrawerLayout
ve ConstraintLayout
. Saydam durum çubuğu varsayıldığında, durum çubuğu rengi artık arka plan rengiyle aynıdır ConstraintLayout
.
Bununla birlikte, dahil edilen parçanın hala durum çubuğu eki vardır, bu nedenle üstte başka bir 'tam ekran' parçasının canlandırılması durum çubuğunun rengini değiştirmez.
İçine sevk makaleden kod Biraz Activity
'ler onCreate
:
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.container)) { view, insets ->
insets.replaceSystemWindowInsets(
insets.systemWindowInsetLeft,
0,
insets.systemWindowInsetRight,
insets.systemWindowInsetBottom
)
}
Ve hepsi iyi, ancak şimdi Toolbar
durum çubuğu yüksekliğini ele almıyor. Bazıları makaleye atıfta bulunuyor ve tamamen çalışan bir çözümümüz var:
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 (lütfen marginTop in'in Toolbar
önizleme amaçlı olduğunu, kodla değiştirileceğini unutmayın):
<?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"
activity_main.xml dosyasına ekledim . Sistem çubukları yarı saydamdır ve şeffaf değildir.