我采用了"一个活动,多个片段"为我的Android(Xamarin)应用程序定义布局的方法。所有视图(片段)共享由BottomNavigationView
管理的MainActivity
,将每个片段添加到同一FrameLayout
。但是,由于某些片段需要定义自己的AppBarLayouts
,例如创建CollapsingToolbarLayout
,我不能只创建FragmentTransaction
并将这些片段放在同一个FrameLayout
中容器,因为Toolbar
是活动布局的一部分,因此不受片段管理。为每个片段添加和管理Toolbar
似乎会适得其反。
到目前为止我尝试了什么:
FrameLayout
,然后显示/隐藏
相应的(在MainActivity
的布局中)制作时
FragmentTransaction
。 DialogFragment
显示内容
在活动片段之上。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 layout (例如用于显示个人资料页面)
<?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。
非常感谢任何示例和advaree!
答案 0 :(得分:0)
在底部布局的片段中,工具栏的需求不断变化。 在测试了不同的方法后,我得出结论:
val prod = x(0)
在此处调用此方法:
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;
}