ในขณะที่คำตอบทั้งหมดข้างต้นหมุนเวียนไปรอบ ๆ แนวคิดพื้นฐานเดียวกันและคุณสามารถทำให้มันทำงานกับเลย์เอาต์ที่เรียบง่ายโดยใช้หนึ่งในตัวอย่างข้างต้น อย่างไรก็ตามฉันต้องการเปลี่ยนสีของพื้นหลังในขณะที่ใช้แถบเลื่อน 'เต็มหน้าจอ' (แถบแท็บกัน) เลื่อนส่วนและรักษาการนำทางปกติแท็บและแถบการกระทำ
หลังจากอ่านบทความอย่างหนึ่งโดย Anton Hadutskiฉันก็เข้าใจดีขึ้นว่าเกิดอะไรขึ้น
ฉันมี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 (โปรดทราบว่า marginTop 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"
ใน activity_main.xml ของฉัน แถบระบบโปร่งแสงและไม่โปร่งใส