Sementara semua jawaban di atas beredar di sekitar ide dasar yang sama dan Anda bisa membuatnya bekerja dengan tata letak sederhana menggunakan salah satu contoh di atas. Namun saya ingin mengubah warna latar belakang saat menggunakan navigasi fragmen 'layar penuh' (menyamping tab) dan mempertahankan navigasi, tab, dan panel aksi biasa.
Setelah membaca dengan seksama sebuah artikel oleh Anton Hadutski saya lebih memahami apa yang sedang terjadi.
Saya miliki DrawerLayout
dengan ConstraintLayout
(yaitu wadah) yang telah Toolbar
, termasuk untuk fragmen utama dan BottomNavigationView
.
Pengaturan DrawerLayout
harus fitsSystemWindows
benar tidak cukup, Anda perlu mengatur keduanya DrawerLayout
dan ConstraintLayout
. Dengan asumsi bilah status transparan, warna bilah status sekarang sama dengan warna latar belakang ConstraintLayout
.
Namun, fragmen yang disertakan masih inset status bar, jadi menghidupkan fragmen 'layar penuh' lain di atas dengan tidak mengubah warna bilah status.
Sedikit kode dari artikel disebut dalam Activity
's onCreate
:
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.container)) { view, insets ->
insets.replaceSystemWindowInsets(
insets.systemWindowInsetLeft,
0,
insets.systemWindowInsetRight,
insets.systemWindowInsetBottom
)
}
Dan semuanya baik-baik saja, kecuali sekarang Toolbar
tidak mengatasi tinggi bilah status. Beberapa lebih merujuk pada artikel dan kami memiliki solusi yang berfungsi penuh:
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 (harap dicatat bahwa marginTop in Toolbar
adalah untuk keperluan pratinjau, itu akan diganti oleh kode):
<?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"
ke activity_main.xml saya. Bilah sistem transparan dan tidak transparan.