gpt4 book ai didi

android - 不同 fragment 的多个工具栏布局

转载 作者:太空狗 更新时间:2023-10-29 14:41:06 26 4
gpt4 key购买 nike

我采用了“一个 Activity ,多个 fragment ”的方式来为我的 Android (Xamarin) 应用程序定义布局。所有 View ( fragment )共享相同的 BottomNavigationView,由 MainActivity 管理,将每个 fragment 添加到相同的 FrameLayout。但是,由于一些 fragment 需要定义它们自己的 AppBarLayouts,例如创建一个 CollapsingToolbarLayout,我不能只创建一个 FragmentTransaction 并将那些FrameLayout 容器中的 fragment ,因为 Toolbar 是 Activity 布局的一部分,因此不受 fragment 管理。为每个 Fragment 添加和管理 Toolbar 似乎也会适得其反。

到目前为止我尝试了什么:

  • 为每个变体设置一个 FrameLayout,然后显示/隐藏相应地(在 MainActivity 的布局中) fragment 交易
  • 使用全屏 DialogFragment 显示内容在 Activity fragment 之上。
  • 将“有问题的” fragment 转换成Activity(使其难以处理 BottomNavigationView)。

MainActivity 目前看起来像这样(省略了一些细节):

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
android:id="@+id/coordinator"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">

<include
android:id="@+id/appbar_main"
layout="@layout/toolbar_main"/>

<FrameLayout
android:id="@+id/fragment_container"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />

<include
android:id="@+id/bottombar"
layout="@layout/toolbar_nav" />

</android.support.design.widget.CoordinatorLayout>

appbar_main 布局(由 MainActivity 使用)

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true">

<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true">

<!-- logo layout -->
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="?attr/actionBarSize"
android:orientation="horizontal"
android:layout_gravity="center"
android:paddingTop="10dp"
android:paddingBottom="10dp">

<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>

<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>

</LinearLayout>

</android.support.v7.widget.Toolbar>

</android.support.design.widget.AppBarLayout>

appbar_collapsing 布局(例如用于显示个人资料页面)

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true">

<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
app:contentScrim="@drawable/toolbar_app_bg"
app:layout_scrollFlags="scroll|exitUntilCollapsed|snap">

<ffimageloading.views.ImageViewAsync
android:id="@+id/imageViewCover"
android:layout_width="match_parent"
android:layout_height="200dp"
app:layout_collapseMode="parallax"
app:layout_collapseParallaxMultiplier="0.9" />

<ffimageloading.views.ImageViewAsync
android:id="@+id/imageViewProfile"
android:layout_width="100dp"
android:layout_height="100dp"/>

<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_collapseMode="pin"/>

</android.support.design.widget.CollapsingToolbarLayout>

</android.support.design.widget.AppBarLayout>

上面提供的 appbar_main 布局非常简单,也是显示工具栏的主要方式。 appbar_collapsing 与主布局的不同之处在于,工具栏嵌套在 CollapsingToolbarLayout 中,使其在滚动时可折叠,同时折叠两个 ImageView。

非常感谢任何示例和广告!

最佳答案

在底部布局的 fragment 中,工具栏的需求不断变化。在测试了不同的方法后,我得出这样的结论:

 private void createMenus(Toolbar actionBarToolBar, @MenuRes int menu){
((MainActivity) Objects.requireNonNull(getActivity())).setSupportActionBar(actionBarToolBar);
actionBarToolBar.setTitle("");
actionBarToolBar.inflateMenu(menu);
}

在这里调用这个方法:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
mRootView = inflater.inflate(R.layout.fragment_profile, container, false);
createMenus(mToolbar,R.menu.profile_menu);
setHasOptionsMenu(true);
//add fragments to adapter
//...

return mRootView;
}

然后覆盖这个:

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
menu.clear();
inflater.inflate(R.menu.profile_menu, menu);
super.onCreateOptionsMenu(menu, inflater);
}

关于android - 不同 fragment 的多个工具栏布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48052672/

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