問題があったレイアウト例
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appbar_layout"
app:elevation="0dp"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
app:layout_scrollFlags="enterAlways|scroll"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</com.google.android.material.appbar.AppBarLayout>
<!-- メインコンテンツを表示するための領域 -->
<FrameLayout
android:id="@+id/main_contents_layout"
app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<!-- メインコンテンツのアイテムを選択したら遷移する追加画面の領域 -->
<FrameLayout
android:id="@+id/additional_content_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
main_contents_layout
は中身にリストをもつFragmentを表示して、そのスクロールに伴ってツールバーが出たり消えたりする。
additional_contents_layout
は最初は何も表示されていないが、main_contents_layout
のFragment内でたとえばリストの項目を選択したときなどに追加で表示する。
ちなみにこれはツールバーを含む画面全体に被さるように表示したいので、app:layout_behavior
は設定していない。
さて、このような条件下でadditional_contents_layout
にFragment(※以下AdditionalFragment
とでもしておく)を表示すると、AdditionalFragment
内に配置したRecyclerViewのスクロールにも連動してツールバーが出たり消えたりしてしまい、
つまりAdditionalFragment
の開始前と終了後でツールバーの状態が一致しないということが起こる。
大した問題ではないが気持ち悪いので、以下のように解決した。
解決後のレイアウト
<?xml version="1.0" encoding="utf-8"?>
<FragmeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appbar_layout"
app:elevation="0dp"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
app:layout_scrollFlags="enterAlways|scroll"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</com.google.android.material.appbar.AppBarLayout>
<!-- メインコンテンツを表示するための領域 -->
<FrameLayout
android:id="@+id/main_contents_layout"
app:layout_behavior="com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
<!-- メインコンテンツのアイテムを選択したら遷移する追加画面の領域 -->
<FrameLayout
android:id="@+id/additional_content_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</FrameLayout>
わざわざ記事に残しておいてなんだが、せやなという感じしかしない。