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
并了解为什么 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)
您可以看到,所有这些函数都调用了:
复制此函数的代码,它应该可以工作。
我想根据一些 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
并了解为什么 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)
您可以看到,所有这些函数都调用了:
复制此函数的代码,它应该可以工作。