对我来说,听起来很奇怪,每个片段中都没有appbar和工具栏。因此,我选择了在活动中具有工具栏的单个应用栏。
要解决CoordinatorLayout的问题,您将必须设置您FrameLayout
(或任何其他Layout)的不同行为,这些行为应该包含您要覆盖默认行为的每个片段中的片段。
假设您的默认行为是 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不会折叠appbar等,并将允许片段布局为全高。