上記のすべての答えは同じ基本的なアイデアを循環し、上記の例の1つを使用して単純なレイアウトで機能させることができます。ただし、スライド式の「フルスクリーン」(タブバーを横に並べる)フラグメントナビゲーションを使用しているときに背景の色を変更し、通常のナビゲーション、タブ、およびアクションバーを維持したいと思っていました。
アントン・ハドゥツキーの記事を注意深く読んだ後、私は何が起こっているのかをよりよく理解しました。
私は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 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に追加しました。システムバーは半透明で透明ではありません。