How to enable / disable FloatingActionButton behavior

I am working on an application in some fragment, I want to hide FloatingActionButtton. When I set android: visibility = "gone" . The behavior of the animation will show me the FloatingActionButtton when I scroll up and down. Is there any way that I can disable / enable the behavior of the FloatingActionButtton.

Thanks in advance.

here is my code

QuickReturnFooterBehavior.java

package com.app.common; import android.animation.Animator; import android.content.Context; import android.support.design.widget.CoordinatorLayout; import android.support.v4.view.ViewCompat; import android.support.v4.view.animation.FastOutSlowInInterpolator; import android.util.AttributeSet; import android.view.View; import android.view.ViewPropertyAnimator; @SuppressWarnings("unused") public class QuickReturnFooterBehavior extends CoordinatorLayout.Behavior<View> { private static final FastOutSlowInInterpolator INTERPOLATOR = new FastOutSlowInInterpolator(); private int mDySinceDirectionChange; private boolean mIsShowing; private boolean mIsHiding; public QuickReturnFooterBehavior() { } public QuickReturnFooterBehavior(Context context, AttributeSet attrs) { super(context, attrs); } @Override public boolean onStartNestedScroll(CoordinatorLayout coordinatorLayout, View child, View directTargetChild, View target, int nestedScrollAxes) { return (nestedScrollAxes & ViewCompat.SCROLL_AXIS_VERTICAL) != 0; } @Override public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, View child, View target, int dx, int dy, int[] consumed) { if (dy > 0 && mDySinceDirectionChange < 0 || dy < 0 && mDySinceDirectionChange > 0) { // We detected a direction change- cancel existing animations and reset our cumulative delta Y child.animate().cancel(); mDySinceDirectionChange = 0; } mDySinceDirectionChange += dy; if (mDySinceDirectionChange > child.getHeight() && child.getVisibility() == View.VISIBLE && !mIsHiding) { hide(child); } else if (mDySinceDirectionChange < 0 && child.getVisibility() == View.GONE && !mIsShowing) { show(child); } } /** * Hide the quick return view. * * Animates hiding the view, with the view sliding down and out of the screen. * After the view has disappeared, its visibility will change to GONE. * * @param view The quick return view */ private void hide(final View view) { mIsHiding = true; ViewPropertyAnimator animator = view.animate() .translationY(view.getHeight()) .setInterpolator(INTERPOLATOR) .setDuration(200); animator.setListener(new Animator.AnimatorListener() { @Override public void onAnimationStart(Animator animator) {} @Override public void onAnimationEnd(Animator animator) { // Prevent drawing the View after it is gone mIsHiding = false; view.setVisibility(View.GONE); } @Override public void onAnimationCancel(Animator animator) { // Canceling a hide should show the view mIsHiding = false; if (!mIsShowing) { show(view); } } @Override public void onAnimationRepeat(Animator animator) {} }); animator.start(); } /** * Show the quick return view. * * Animates showing the view, with the view sliding up from the bottom of the screen. * After the view has reappeared, its visibility will change to VISIBLE. * * @param view The quick return view */ private void show(final View view) { mIsShowing = true; ViewPropertyAnimator animator = view.animate() .translationY(0) .setInterpolator(INTERPOLATOR) .setDuration(200); animator.setListener(new Animator.AnimatorListener() { @Override public void onAnimationStart(Animator animator) { view.setVisibility(View.VISIBLE); } @Override public void onAnimationEnd(Animator animator) { mIsShowing = false; } @Override public void onAnimationCancel(Animator animator) { // Canceling a show should hide the view mIsShowing = false; if (!mIsHiding) { hide(view); } } @Override public void onAnimationRepeat(Animator animator) {} }); animator.start(); } } 

and XML

  <android.support.design.widget.FloatingActionButton app:layout_behavior="com.app.common.QuickReturnFooterBehavior" android:id="@+id/fab_2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="16dp" android:src="@drawable/ic_action_quick_response_code" app:backgroundTint="@color/text_gray" app:descriptionText="@string/add_friend" app:elevation="3dp" app:borderWidth="0dp" /> 
+8
android floating-action-button android-coordinatorlayout
source share
2 answers

Finally, I find this solution and want to share with you.

You can enable / disable the behavior of FloatingActionButton

Disable behavior

  FloatingActionButton fab2 = (FloatingActionButton)findViewById(R.id.fab2); CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) fab2.getLayoutParams(); params.setBehavior(null); fab2.requestLayout(); fab2.setVisibility(View.GONE); 

Enable behavior

  CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) fab2.getLayoutParams(); params.setBehavior(new QuickReturnFooterBehavior()); fab2.requestLayout(); fab2.setVisibility(View.VISIBLE); 

Edited: more reusable class

 public class CoordinateBehaviourUtils { public static void enableDisableViewBehaviour(View view,CoordinatorLayout.Behavior<View> behavior,boolean enable){ CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) view.getLayoutParams(); params.setBehavior(behavior); view.requestLayout(); view.setVisibility((enable ? View.VISIBLE: View.GONE)); } } 

How to enable the use of a common class

 FloatingActionButton fab2 = (FloatingActionButton)findViewById(R.id.fab2); CoordinateBehaviourUtils.enableDisableViewBehaviour(fab2,new QuickReturnFooterBehavior(),true); 

How to disable the use of a common class

 FloatingActionButton fab2 = (FloatingActionButton)findViewById(R.id.fab2); CoordinateBehaviourUtils.enableDisableViewBehaviour(fab2,null,false); 

Hope it solves your problem :)

+20
source share

There is no difference when setting the visibility of FAB, it will most likely work with other controls.

 0 is for VISIBLE 4 is for INVISIBLE 8 is for GONE 

You can try something like this:

 FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); // to make is disable for some requirement fab.setVisibility(View.GONE); // to make it enable fab.setVisibility(View.VISIBLE); 
0
source share

All Articles