我想根据一些小吃店的出现和消失来更改浮动操作按钮的位置。它可以与小吃栏自行超时配合使用,但不适用于手动关闭的小吃棒。我想在后一种情况下在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
,看看为什么FloatingActionButton
对Snackbar
做出反应。
通过快速查看源代码,您应该覆盖: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)
复制此函数中的代码,它应该可以工作。