我可以将嵌套的 FloatingActionButton 锚定到视口吗?

Can I anchor nested FloatingActionButton to the viewport?

我有一个嵌套如下的布局(我使用伪代码并为简洁起见跳过了一些标签)

Activity布局:

CoOrdinatorLayout
    - AppBarLayout
         - FragmentOne
    - FragmentTwo

片段二布局使用AppBarLayout.ScrollingViewBehavior但包含FAB:

CoOrdinatorLayout
    - FloatingActionButton
    - TabLayout

所以运行时层次结构看起来像

CoOrdinatorLayout (Activity)
    - AppBarLayout
         - LinearLayout (FragmentOne)
    - CoOrdinatorLayout (FragmentTwo)
         - FloatingActionButton
         - TabLayout

FAB 应该锚定在视口(物理屏幕)的右下角,但(由于行为)而是在 viewpager(每个页面上包含列表)的右下角。 这意味着 FAB 仅在布局滚动到末尾时可见(并且应用栏布局折叠)

有什么方法可以让 FAB 像这样嵌套时锚定到视口吗?将它移动到 activity 不是一个好的选择

编辑 - 已经过了几天所以我添加了我在下面使用的解决方案,但是如果有人可以建议清洁工,工作 XML-based 解决方案我将更改已接受的答案,因为这就是我所追求的

我使用的解决方案是在 Fragment 中以编程方式创建 FAB(因此 Fragment 仍然是正确负责实现其侦听器等的那个),然后将其附加到 Activity 的 CoOrdinator 布局(我发现在 activity 上使用 getter 接口,因为它似乎是使用 getActivity().findViewById(...) 的更简洁的替代方法)

public class MyActivity extends implements MyCallbacks {
    ...
}

public interface MyCallbacks {
    CoordinatorLayout getCoordinatorLayoutRoot();
}

public class MyFragment extends Fragment {

    ...

    private void setupNewFab() {
        final CoordinatorLayout rootCoordinator = ((MyCallbacks) getActivity())
            .getCoordinatorLayoutRoot();
        final LayoutInflater inflater = (LayoutInflater) getActivity()
            .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        final FloatingActionButton fab = (FloatingActionButton) inflater.inflate(
            R.layout.my_fab_definition, rootCoordinator, false);
        fab.setOnClickListener(v -> myAction());
        rootCoordinator.addView(fab);
    }

}

需要注意的一件事是,我使用了这种 inflation 方法,因为在 View.inflate(...) 的结果上设置点击侦听器似乎不起作用