这个问题的解决方法是使用CoordinatorLayout布局和设置Fab的behavior。在xml代码中的Fab标记中增加一个app:layout_anchor属性与一个带有bottom_navigation的MenuView引用。这将使Fab保持在底部导航栏的上面。然后,在ActivityResult或某些其他方法中,当Snackbar显示时,您可以使用Snackbar API的setCallback方法来实现Fab上移的效果。
示例代码如下:
Snackbar snackbar = Snackbar.make(parentLayout,
"Message",
Snackbar.LENGTH_LONG);
snackbar.setCallback(new Snackbar.Callback() {
@Override
public void onShown(Snackbar snackbar) {
// Move FAB up
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) fab.getLayoutParams();
int marginBottom = params.bottomMargin;
params.setMargins(params.leftMargin, params.topMargin, params.rightMargin, marginBottom + snackbar.getHeight());
fab.setLayoutParams(params);
}
@Override
public void onDismissed(Snackbar snackbar, int event) {
// Move FAB down
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) fab.getLayoutParams();
int marginBottom = params.bottomMargin;
params.setMargins(params.leftMargin, params.topMargin, params.rightMargin, marginBottom - snackbar.getHeight());
fab.setLayoutParams(params);
}
}).show();