gpt4 book ai didi

android - fragment 或 Activity 中带有工具栏的协调器布局

转载 作者:IT老高 更新时间:2023-10-28 13:06:21 25 4
gpt4 key购买 nike

有了新的设计库,有几个新的布局可以改变工具栏的行为方式,如果开发人员愿意的话。由于不同的 Fragment 有不同的行为和目标,例如带有可折叠工具栏的画廊 Fragment 显示重要照片,或者没有 ScrollView 的 Fragment 不需要 appbarlayout 来隐藏工具栏,因此在 Activity 中具有单个工具栏可以证明是困难的。

因此,我应该将工具栏移动到每个 fragment 吗?如果是这样,我必须在每次显示 fragment 时设置 supportActionBar,并且还要引用 fragment 中的 Activity ,这会使 fragment 的独立性无效。如果我将工具栏单独留在 Activity 中,则必须为每个 fragment 中的每种行为类型定义多个布局。最好的方法是什么?

最佳答案

对我来说,在每个 fragment 中都有 appbar 和工具栏听起来太奇怪了。所以我选择在 Activity 中使用带有工具栏的单个 appbar。

要使用 CoordinatorLayout 解决该问题,您必须设置 FrameLayout(或任何其他布局)的不同行为,这些行为应该包含您想要覆盖默认行为的每个 fragment 的 fragment 。

假设您的默认行为是 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>

并且在您希望不实现的每个 fragment 中 app:layout_behavior="@string/appbar_scrolling_view_behavior" 您必须覆盖 onAttachonDetach 将改变 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 等,并将允许 fragment 布局为全高。

关于android - fragment 或 Activity 中带有工具栏的协调器布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30739806/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com