更新到支持库 24 时自定义布局行为的怪癖

Quirk with custom Layout Behavior when updating to Support Library 24

在我从事的最后几个项目中,我总是为 Button 设置自定义布局行为,以模仿显示 Snackbar 时 FloatingButton 制作的动画。我使用的代码是:

public class BehaviorButton extends CoordinatorLayout.Behavior<Button> {

    public BehaviorButton(Context context, AttributeSet attrs) {}

    @Override
    public boolean layoutDependsOn(CoordinatorLayout parent, Button child, View dependency) {
        return dependency instanceof Snackbar.SnackbarLayout;
    }

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

然后 "bind" 这个 class 通过 xml 到按钮。

app:layout_behavior=".BehaviorButton"

没什么特别的。 问题:当我将支持库从 23.4.0 更新到 24 时,此功能消失了。我的问题是:我应该如何在支持库 24 中实现这种行为?

在下面的 gif 中,您可以看到没有按钮。当我添加 layout_behavior 它 "loses" 它的位置时。

您需要检查依赖项是否为 SnackbarLayout 然后才翻译按钮。

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