Jak dla mnie brzmi to zbyt dziwnie, aby mieć pasek aplikacji i pasek narzędzi w każdym fragmencie. Więc zdecydowałem się mieć pojedynczy pasek aplikacji z paskiem narzędzi w aktywności.
Aby rozwiązać ten problem za pomocą CoordinatorLayout, będziesz musiał ustawić inne zachowanie swojego FrameLayout
(lub dowolnego innego układu), który powinien przechowywać fragmenty z każdego fragmentu, który chcesz przesłonić domyślne zachowanie.
Załóżmy, że domyślne zachowanie to app:layout_behavior="@string/appbar_scrolling_view_behavior"
Wtedy w twoim fragment_activity_layout.xml możesz mieć coś takiego:
<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>
I w każdym fragmencie, którego nie chcesz implementować app:layout_behavior="@string/appbar_scrolling_view_behavior"
, będziesz musiał nadpisać onAttach
i onDetach
metody, które zmienią zachowanie twojego 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;
}
Po tym CoordinatorLayout nie zwinie paska aplikacji itp. I pozwoli na układy fragmentów na pełną wysokość.