En cuanto a mí, suena demasiado extraño tener una barra de aplicaciones y una barra de herramientas en cada fragmento. Así que elegí tener una barra de aplicaciones única con la barra de herramientas en actividad.
Para resolver ese problema con CoordinatorLayout, tendrá que establecer un comportamiento diferente de su FrameLayout
(o cualquier otro diseño) que se supone que contiene fragmentos de cada fragmento que desea anular el comportamiento predeterminado.
Supongamos que su comportamiento predeterminado es app:layout_behavior="@string/appbar_scrolling_view_behavior"
Luego, en su fragment_activity_layout.xml, puede tener algo como eso:
<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>
Y en cada fragmento que desea no aplicar app:layout_behavior="@string/appbar_scrolling_view_behavior"
tendrá que anular onAttach
y onDetach
métodos que van a cambiar el comportamiento de su 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;
}
Después de eso, CoordinatorLayout no colapsará la barra de aplicaciones, etc. y permitirá que los diseños de los fragmentos sean de altura completa.