私にとっては、各フラグメントにappbarとtoolbarを持つのは奇妙に思えます。そのため、アクティビティにツールバーを含む単一のappbarを選択しました。
CoordinatorLayoutでこの問題を解決するには、FrameLayout
デフォルトの動作を上書きしたい各フラグメントのフラグメントを保持することになっている(または他のレイアウト)の異なる動作を設定する必要があります。
デフォルトの動作が app:layout_behavior="@string/appbar_scrolling_view_behavior"
次に、fragment_activity_layout.xmlに次のようなものがあるとします。
<android.support.design.widget.CoordinatorLayout
android:id="@+id/coordinator"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.Toolbar
android:id="@+id/dashboard_toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.Toolbar"
app:layout_scrollFlags="scroll|enterAlways"/>
</android.support.design.widget.AppBarLayout>
<FrameLayout
android:id="@+id/dashboard_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
</android.support.design.widget.CoordinatorLayout>
そして、各フラグメントにあなたは実装しないことを望むapp:layout_behavior="@string/appbar_scrolling_view_behavior"
あなたがオーバーライドする必要がありますonAttach
し、onDetach
あなたの行動を変更するメソッドFrameLayout
:
CoordinatorLayout.Behavior behavior;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
if(behavior != null)
return;
FrameLayout layout =(FrameLayout) getActivity().findViewById(R.id.dashboard_content);
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) layout.getLayoutParams();
behavior = params.getBehavior();
params.setBehavior(null);
}
@Override
public void onDetach() {
super.onDetach();
if(behavior == null)
return;
FrameLayout layout =(FrameLayout) getActivity().findViewById(R.id.dashboard_content);
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) layout.getLayoutParams();
params.setBehavior(behavior);
layout.setLayoutParams(params);
behavior = null;
}
その後、CoordinatorLayoutはappbarなどを折りたたまず、フラグメントレイアウトをフルハイトにすることができます。