如何在 Android 中禁用 Snackbar 和 FAB 动画的 CoordinatorLayout

How to disable CoordinatorLayout for Snackbar and FAB animation in Android

我有 CoordinatorLayoutDesign Support Library 换行 FloatingActionButton,在我的布局中 FABmargin_bottom 设置为超过 50dp 所以我当 SnackBar 出现时,不希望 'CoordinatorLayout' 使 FloatingActionButton 动画得更高,因为它无论如何都不会被覆盖。

如何禁用 CoordinatorLayout 使其在 SnackBar 出现时不会移动 FloatingActionButton

这是我的代码:

Snackbar snack = Snackbar.make(getView(), R.string.you_have_to_be_logged_in, Snackbar.LENGTH_LONG)
                .setAction(R.string.log_in, new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        LogInDialog logInDialog = new LogInDialog();
                        logInDialog.show(ft, "LogInDialog");
                    }
                });

好吧,如果你真的想实现这个目标,你可以从 Coordinator Layout 中删除 FAB,这样它就根本不应该有动画了。

您可以使用自定义 CoordinatorLayout.Behavior

public class FloatingActionButtonBehavior extends CoordinatorLayout.Behavior<FloatingActionButton> {
    public FloatingActionButtonBehavior(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public boolean layoutDependsOn(CoordinatorLayout parent, FloatingActionButton child, View dependency) {
        return !(dependency instanceof Snackbar.SnackbarLayout); // here is key idea
    }

    @Override
    public boolean onDependentViewChanged(CoordinatorLayout parent, FloatingActionButton child, View dependency) {
        float translationY = Math.min(0, dependency.getTranslationY() - dependency.getHeight());
        child.setTranslationY(translationY);
        return true;
    }
}