解雇Snackbar时,FloatingActionButton不会降低

all*_*o86 11 android dismiss floating-action-button snackbar

我想用一个Snackbar.我有一个FloatingActionButton包裹在CoordinatorLayout.当Snackbar显示时,按钮正确向上移动.当它自动关闭时,按钮向下移动.但如果我以Snackbar编程方式解除,按钮不会下降.我的代码很简单:

mSnackbar = Snackbar.make(mCoordinatorLayout, text, Snackbar.LENGTH_LONG)
                .setAction(R.string.undo, new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        undoDeleteTasks();
                    }
                });
        mSnackbar.show();
Run Code Online (Sandbox Code Playgroud)

FloatingActionButton当以Snackbar编程方式解散时,是否有办法降低移动速度?

小智 16

试试这个:

Snackbar mysnack = Snackbar.make( fab, "Hi, welcome to my app!", Snackbar.LENGTH_LONG );
mysnack.getView().addOnAttachStateChangeListener( new View.OnAttachStateChangeListener() {
    @Override
    public void onViewAttachedToWindow( View v ) {

    }

    @Override
    public void onViewDetachedFromWindow( View v ) {
        fab.setTranslationY( 0 );
    }
});
mysnack.show();
Run Code Online (Sandbox Code Playgroud)


new*_*our 12

问题是,在一个中CoordinatorLayout,FAB被移动,因为onDependentViewChanged()Snackbar动画输入或输出时,它的行为类被调用.

但是,当你调用时Snabackbar.dismiss()不会发生动画.因此没有onDependentViewChanged().因此FAB的运动.

我想知道是否有可能

  1. 使Snackbar解散动画?
  2. 创建一个在Snackbar导致onDependentViewRemoved()时移动FAB的行为?

Farzad119的答案可以说有点脆弱.我的方法 - 虽然也不令人满意 - 是改变FAB上的行为,以便在SnackBar移除时移动FAB :

   @Override
   public void onDependentViewRemoved(CoordinatorLayout parent, FloatingActionButton child, View dependency) {
     super.onDependentViewRemoved(parent, child, dependency);
     float translationY = Math.min(0, parent.getBottom() - child.getBottom());
     child.setTranslationY(translationY);
   }
Run Code Online (Sandbox Code Playgroud)