Trong khi tất cả các câu trả lời ở trên xoay quanh cùng một ý tưởng cơ bản và bạn có thể làm cho nó hoạt động với các bố cục đơn giản bằng một trong các ví dụ trên. Tuy nhiên, tôi muốn thay đổi màu nền trong khi sử dụng điều hướng phân đoạn 'toàn màn hình' (thanh tab sang một bên) và duy trì điều hướng thường xuyên, tab và thanh hành động.
Sau khi đọc kỹ một bài viết của Anton Hadutski, tôi đã hiểu rõ hơn về những gì đang diễn ra.
Tôi có DrawerLayout
bằng ConstraintLayout
(tức là container) trong đó có Toolbar
, bao gồm cho đoạn chính và BottomNavigationView
.
Cài đặt DrawerLayout
phải fitsSystemWindows
đúng là không đủ, bạn cần đặt cả hai DrawerLayout
và ConstraintLayout
. Giả sử thanh trạng thái trong suốt, màu thanh trạng thái bây giờ giống với màu nền của ConstraintLayout
.
Tuy nhiên, đoạn được bao gồm vẫn còn chèn thanh trạng thái, do đó, hoạt hình một đoạn 'toàn màn hình' khác ở trên cùng mà không thay đổi màu của thanh trạng thái.
Một chút mã từ bài viết được giới thiệu vào Activity
's onCreate
:
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.container)) { view, insets ->
insets.replaceSystemWindowInsets(
insets.systemWindowInsetLeft,
0,
insets.systemWindowInsetRight,
insets.systemWindowInsetBottom
)
}
Và tất cả đều tốt, ngoại trừ bây giờ Toolbar
không đề cập đến chiều cao của thanh trạng thái. Một số đề cập thêm đến bài viết và chúng tôi có một giải pháp làm việc đầy đủ:
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 (xin lưu ý rằng marginTop trong Toolbar
là dành cho mục đích xem trước, nó sẽ được thay thế bằng mã):
<?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 của tôi. Các thanh hệ thống mờ và không minh bạch.