Bagi saya kedengarannya terlalu aneh untuk memiliki appbar dan toolbar di setiap fragmen. Jadi saya telah memilih untuk memiliki satu appbar dengan toolbar dalam aktivitas.
Untuk mengatasi masalah tersebut dengan CoordinatorLayout Anda harus menyetel perilaku berbeda dari Anda FrameLayout
(atau Layout lainnya) yang seharusnya menyimpan fragmen dari setiap fragmen yang ingin Anda ganti perilaku defaultnya.
Mari kita asumsikan, bahwa perilaku default Anda adalah app:layout_behavior="@string/appbar_scrolling_view_behavior"
Kemudian di fragment_activity_layout.xml Anda mungkin memiliki sesuatu seperti itu:
<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>
Dan di setiap fragmen yang tidak ingin Anda implementasikan, app:layout_behavior="@string/appbar_scrolling_view_behavior"
Anda harus mengganti onAttach
dan onDetach
metode yang akan mengubah perilaku 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;
}
Setelah itu CoordinatorLayout tidak akan menciutkan appbar, dll. Dan akan memungkinkan tata letak fragmen menjadi tinggi penuh.