Android:检测协调器布局行为中的小吃店关闭或超时

Android: detecting snackbar dismiss or timeout in coordinator layout's behaviour

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

这就是我现在拥有的:

@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.

有反应

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

您可以看到,所有这些函数都调用了:

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

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