Đối với tôi, nghe có vẻ quá kỳ lạ khi có thanh ứng dụng và thanh công cụ trong mỗi đoạn. Vì vậy, tôi đã chọn để có một thanh ứng dụng duy nhất với thanh công cụ đang hoạt động.
Để giải quyết vấn đề đó với CoordinatorLayout, bạn sẽ phải thiết lập các hành vi khác nhau của bạn FrameLayout
(hoặc bất kỳ Bố cục nào khác) để giữ các đoạn từ mỗi đoạn mà bạn muốn ghi đè hành vi mặc định.
Hãy giả sử rằng hành vi mặc định của bạn là app:layout_behavior="@string/appbar_scrolling_view_behavior"
Sau đó, tronggment_activity_layout.xml của bạn, bạn có thể có một cái gì đó giống như vậy:
<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>
Và trong mỗi phân đoạn bạn không muốn triển khai, app:layout_behavior="@string/appbar_scrolling_view_behavior"
bạn sẽ phải ghi đè onAttach
và onDetach
các phương thức sẽ thay đổi hành vi của bạn 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;
}
Sau đó CoordinatorLayout sẽ không thu gọn thanh ứng dụng, v.v. và sẽ cho phép bố cục phân đoạn có chiều cao đầy đủ.