FAB参加每项活动

时间:2018-07-21 19:42:54

标签: java android

我正在尝试构建一个浮动操作按钮,该按钮将在正在运行的每个活动中显示。如何完成布局以显示在每个活动中。

我已经看到了一些使用WindowManager的方法,但是我不喜欢它放在应用程序的顶部,并且需要覆盖方面。使用ZIndex或在转换新活动等时从服务添加到视图中有更好的方法吗?

谢谢。

4 个答案:

答案 0 :(得分:1)

创建布局fab_layout

<android.support.design.widget.FloatingActionButton
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_fab_24dp"
        android:layout_marginRight="@dimen/fab_margin"
        android:layout_marginEnd="@dimen/fab_margin"
        android:layout_marginBottom="@dimen/fab_margin"
        android:layout_gravity="bottom|end"
        app:backgroundTint="#00ff00"/>

在所有活动中添加以下标签:

<include layout="@layout/fab_layout />

答案 1 :(得分:1)

您可以使用静态方法创建一个单独的类,该类将创建一个FabButton并将其附加到您的根视图。

    public class FabButton {
      public static void init(AppCompatActivity activity){
        View root = root.getWindow().getDecorView();
        FloatingActionButton fab = new FloatingActionButton(getContext());
        fab.setId(R.id.fab);
        fab.setLayoutParams(new RelativeLayout.LayoutParams(
                RelativeLayout.LayoutParams.WRAP_CONTENT,
                RelativeLayout.LayoutParams.WRAP_CONTENT
                ));
        root.addView(fab);
      }
    }

您可以在任何要添加的地方使用它。在您活动的onCreate中,致电:

FabButton.init(this);

编辑:我根据您的要求找到了更好的答案

在您的应用程序类'onCreate中,添加

registerActivityLifecycleCallbacks(this);

然后实现ActivityLifecycleCallbacks的方法。

现在加入

 @Override
 public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
   FabButton.init(activity);
 }

答案 2 :(得分:0)

您可以创建一个基本活动“ FABActivity”,在其中可以在运行时通过onCreate()方法将FAB按钮添加到根布局中。

扩展此活动的每个活动都将具有相同的FAB。

答案 3 :(得分:0)

这里有无数种方式可以实现您想要的目标。

这里是另一个:

您可以将所有活动作为片段。您可以使用带有相对布局的xml布局创建一个MainActivity,在其中添加FAB和一个容器(片段的宽度和高度= match_parent)(您的活动)。