更新到支持库 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;
}
在我从事的最后几个项目中,我总是为 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;
}