สำหรับฉันมันฟังดูแปลกเกินไปที่จะมีแถบแอปและแถบเครื่องมือในแต่ละส่วน ดังนั้นฉันจึงเลือกที่จะมีแถบแอปเดียวพร้อมแถบเครื่องมือในกิจกรรม
ในการแก้ปัญหานั้นด้วย 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 จะไม่ยุบแถบแอป ฯลฯ และจะอนุญาตให้เค้าโครงส่วนย่อยเป็นแบบเต็มความสูง