我想根据一些小吃店的出现和消失来更改浮动操作按钮的位置。它可以与小吃栏自行超时配合使用,但不适用于手动关闭的小吃棒。我想在后一种情况下在onDependentViewRemoved中设置位置,但是,随着小吃栏的超时,这会导致一些问题,因为同时调用了onDependentViewChanged和onDependentViewRemoved。因此,如果给定的小吃栏被取消或超时,我希望能够以某种方式检测到onDependentViewChanged或onDependentViewRemoved。不能将快餐栏的视图设置为浮动动作按钮,因为这些快餐栏可以显示在多个片段上,并且并非所有片段都具有浮动动作按钮。我想知道是否有人知道在浮动操作按钮的行为中进行这种事件/状态检测是否可行?

那就是我现在所拥有的:

@Override
    public boolean onDependentViewChanged(CoordinatorLayout parent, View child, View dependency) {
        if ((child instanceof FloatingActionMenu ||
                child instanceof FloatingActionButton) &&
                (dependency instanceof Snackbar.SnackbarLayout ||
                        dependency instanceof AHBottomNavigation)) {
            this.updateTranslation(parent, child, dependency);
        }

        return false;
    }

    @Override
    public void onDependentViewRemoved(CoordinatorLayout parent, View child, View dependency) {
        if ((child instanceof FloatingActionMenu ||
                child instanceof FloatingActionButton) &&
                dependency instanceof Snackbar.SnackbarLayout) {

            this.updateTranslation(parent, child, dependency);
        }
    }


但是,正如我所说,当两种方法都被调用时(当快餐店超时时),位置会混乱,甚至有时应用程序崩溃。有人能帮我吗?

最佳答案

FloatingActionButton的默认行为是对您的情况的反应。尝试查看android.support.design.widget.FloatingActionButton.Behavior,看看为什么FloatingActionButtonSnackbar做出反应。

通过快速查看源代码,您应该覆盖:


public boolean layoutDependsOn(CoordinatorLayout parent, FloatingActionButton child, View dependency)
public boolean onDependentViewChanged(CoordinatorLayout parent, FloatingActionButton child, View dependency)
public void onDependentViewRemoved(CoordinatorLayout parent, FloatingActionButton child, View dependency)


您会看到,所有这些函数都将调用:

private void updateFabTranslationForSnackbar(CoordinatorLayout parent, final FloatingActionButton fab, boolean animationAllowed)

复制此函数中的代码,它应该可以工作。

09-11 19:18
查看更多