Quant à moi, cela semble trop étrange d'avoir une barre d'applications et une barre d'outils dans chaque fragment. J'ai donc choisi d'avoir une seule barre d'applications avec une barre d'outils en activité.
Pour résoudre ce problème avec CoordinatorLayout, vous devrez définir un comportement différent de votre FrameLayout
(ou de toute autre mise en page) qui est censé contenir des fragments de chaque fragment que vous souhaitez remplacer le comportement par défaut.
Supposons que votre comportement par défaut est app:layout_behavior="@string/appbar_scrolling_view_behavior"
Ensuite, dans votre fragment_activity_layout.xml, vous pouvez avoir quelque chose comme ça:
<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>
Et dans chaque fragment que vous ne souhaitez pas implémenter, app:layout_behavior="@string/appbar_scrolling_view_behavior"
vous devrez remplacer onAttach
et des onDetach
méthodes qui modifieront le comportement de votre 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;
}
Après cela, CoordinatorLayout ne réduira pas la barre d'applications, etc. et permettra aux mises en page de fragment d'être pleine hauteur.