如何将浮动操作button排在一个片段上,只能在Tab布局中

我试图实现以下没有成功。我有两个材料devise刷卡tabs.I使用这个库 'com.oguzdev:CircularFloatingActionMenu:1.0.2'来实现FAB,但是当我滑动标签到第二个标签,FAB仍然附加到新的片段。

我想在第二个片段上隐藏FAB 。 有没有办法做到这一点?

Solutions Collecting From Web of "如何将浮动操作button排在一个片段上,只能在Tab布局中"

这是我为类似的问题所做的。 我宣布了片段的协调器布局。 在协调器布局里面,你可以在图像中看到我已经声明了一个recyclerView,我使用了它并在下面声明了我的浮动操作button。

在此之后,我在onCreateView片段方法中填充浮动操作button的布局。

这是我的XML文件代码:

<android.support.design.widget.CoordinatorLayout android:id="@+id/main_content" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:focusableInTouchMode="true"> <EditText android:id="@+id/search_string" android:layout_width="match_parent" android:layout_height="40dp" android:layout_margin="5dp" android:layout_marginTop="50dp" android:hint="Search Keyword" android:drawableLeft="@drawable/search" android:gravity="left" > </EditText> <android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/photo_recycler_view" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginTop="50dp" android:scrollbars="vertical"/> <android.support.design.widget.FloatingActionButton android:id="@+id/fab" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|end" android:layout_margin="@dimen/fab_margin" android:src="@drawable/ic_action_name6" /> </android.support.design.widget.CoordinatorLayout> 

这是我的Java文件代码:

 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_photo_list, container, false); FloatingActionButton fab = (FloatingActionButton) view.findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Photo photo = new Photo(); PhotoLab.get(getActivity()).addPhoto(photo); Intent intent = PhotoPagerActivity.newIntent(getActivity(), photo.getId()); startActivity(intent); /*Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) .setAction("Action", null).show();*/ } }); mSearchString=(EditText) view.findViewById(R.id.search_string); mPhotoRecyclerView = (RecyclerView) view.findViewById(R.id.photo_recycler_view); mPhotoRecyclerView.setLayoutManager(new GridLayoutManager(getActivity(), 3)); updateUI(); return view; } 

似乎这个图书馆假设你想把FAB附加到你的活动中。 它生成的布局参数似乎也假定父类是一个FrameLayout 。 这是一个有点hacky,但你可以分离它,并重新附加到你想要的地方后,你build()它。

 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { FrameLayout root = (FrameLayout) inflater.inflate(R.layout.fragment_fab, container, false); FloatingActionButton actionButton = new FloatingActionButton.Builder(getActivity()) .build(); actionButton.detach(); root.addView(actionButton); return root; } 

您可以在这里查看我的答案: 使用viewpager / tabslider进行FABanimation

我认为这可能大致是你正在寻找的,但你将不得不使用支持库的FAB来完成它。

在您的firstfragment.xml中,您必须使用上面的库定义浮动操作button。 我想你在你的活动中定义它有两个片段。

有两种情况是我可以想到的:

  1. 当到达第二个选项卡时,前一个显示FABbutton的视图在导航到您的第二个选项卡时不会被删除,这会将其留在那里。 为此,我build议查看removeAllViews()

  2. 你正在为两个选项卡使用相同的xml布局文件。 如果你想要两个标签有不同的内容,那么他​​们可能应该有不同的定义的XML布局文件(在这种情况下,提到了一个FABbutton,一个没有)。

祝你好运!

如果你只想在一个片段上,那么你可以在片段xml文件本身上添加FAB。