위의 모든 답변은 동일한 기본 아이디어를 순환하지만 위의 예제 중 하나를 사용하여 간단한 레이아웃으로 작업 할 수 있습니다. 그러나 슬라이딩 '전체 화면'(탭 막대 제외) 조각 탐색을 사용하면서 배경색을 변경하고 정기적으로 탐색, 탭 및 작업 표시 줄을 유지하고 싶었습니다.
Anton Hadutski의 기사를 자세히 읽은 후 무슨 일이 일어나고 있는지 더 잘 이해할 수있었습니다.
나는 가지고 DrawerLayout
있는 ConstraintLayout
(즉, 컨테이너)를 가지고 있으며 Toolbar
, 주요 조각과BottomNavigationView
.
설정을 DrawerLayout
가진 fitsSystemWindows
true로하는 것은 충분하지 않습니다, 당신은 모두를 설정해야 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 in 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에 추가 했습니다. 시스템 막대는 반투명하며 투명하지 않습니다.