android - 我可以将嵌套的 FloatingActionButton 锚定到视口(viewport)吗?

标签 android android-coordinatorlayout floating-action-button

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

Activity 布局:

CoOrdinatorLayout
    - AppBarLayout
         - FragmentOne
    - FragmentTwo

fragment 二布局使用 AppBarLayout.ScrollingViewBehavior 但包含一个 FAB:

CoOrdinatorLayout
    - FloatingActionButton
    - TabLayout

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

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

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

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

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

最佳答案

我使用的解决方案是在 Fragment 中以编程方式创建 FAB(因此 Fragment 仍然是正确负责实现它的监听器等的那个),然后将它附加到 Activity 的 CoOrdinator 布局(我发现它使用 getter 接口(interface)在 Activity 上,因为它似乎比使用 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);
    }

}

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

关于android - 我可以将嵌套的 FloatingActionButton 锚定到视口(viewport)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39612790/

相关文章:

android - 如何在ViewPager中实现可缩放的ImageView?

android - 如果在 CoordinatorLayout 中设置了 anchorView,则 float 操作按钮不与 Snackbar 一起 float

android - BottomSheetDialog get Behavour 总是返回 null

android - 单击后隐藏 float 操作按钮

java - 分配数组中的属性

android - 如何更改抽屉导航中的标题

android - 如何滚动到scrollview内recyclerview中的特定位置?

android - CoordinatorLayout 中的 FrameLayout 使工具栏背景透明为白色

android - 渲染失败,已知错误 FloatingActionButton

android - 如何将 FAB 置于布局顶部