Search code examples
androidfloating-action-button

FloatingActionButton wont hide with hide() method


I am trying to hide the FloatingActionButton when user click the fab button which anchored with Bottom Sheet with the hide() method, but the fab won't hide.

Currently using support library version 26.1.0

Activity

public class A_TestActivity extends AppCompatActivity {

    FloatingActionButton fab;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.a_test_activity);
        fab = findViewById(R.id.fab);

        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                fab.hide();  // not working
                Toast.makeText(A_TestActivity.this, "hide()", Toast.LENGTH_SHORT).show();
            }
        });
    }
}

XML layout

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/coordinatorLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#AAAAAA">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"/>

    <!-- Bottom Sheet -->
    <android.support.v4.widget.NestedScrollView
        android:id="@+id/vBottomSheetRoot"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@android:color/white"
        app:layout_behavior="android.support.design.widget.BottomSheetBehavior">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <TextView
                android:id="@+id/tv"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="Sample text" />
        </LinearLayout>

    </android.support.v4.widget.NestedScrollView>

    <!-- Floating action button -->
    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:elevation="4dp"
        app:layout_anchor="@id/vBottomSheetRoot"
        app:layout_anchorGravity="top|right|end" />

</android.support.design.widget.CoordinatorLayout>

Solution

  • It is due to the app:layout_anchor attribute. you must remove anchor before change the visibility.try this code

     CoordinatorLayout.LayoutParams p = (CoordinatorLayout.LayoutParams) fab.getLayoutParams();
     p.setAnchorId(View.NO_ID);
     fab.setLayoutParams(p);
     fab.hide();