Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Bottom Sheet Behavior needed to be shown only on button click?

Tags:

I have implemented bottom sheet using appcompat-v7:23.2.1.Everything is working fine,but the only problem is that when I drag up on the layout,the bottom sheet appears.I dont want the bottom sheet to be shown while dragging up on the layout when the bottom sheet is not shown on the screen.

<?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:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/DarkGray"
tools:context=".bottom_sheets.grid.BottomSheetGridActivity">
  <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    app:layout_behavior="@string/appbar_scrolling_view_behavior">

    <Button
        android:id="@+id/btnView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Show view" />
  </LinearLayout>
   <LinearLayout
    android:id="@+id/bottom_sheet1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:orientation="vertical"
    android:layout_marginBottom="8dp"
    app:layout_behavior="@string/bottom_sheet_behavior">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:clipToPadding="false"
        android:background="#fff"
        />
 </LinearLayout>
</android.support.design.widget.CoordinatorLayout>

MainActivity

  @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.bottom_grid);
    Button btnView = (Button) findViewById(R.id.btnView);
    View bottomSheet = findViewById(R.id.bottom_sheet1);
    behavior = BottomSheetBehavior.from(bottomSheet);
    btnView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

             behavior.setState(BottomSheetBehavior.STATE_EXPANDED);
        }
    });

    behavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
        @Override
        public void onStateChanged(@NonNull View bottomSheet, int newState) {
            // React to state change

        }

        @Override
        public void onSlide(@NonNull View bottomSheet, float slideOffset) {
            // React to dragging events
        }
    });

    RecyclerView listRecyclerView = (RecyclerView) findViewById(R.id.recyclerView1);
    listRecyclerView.setHasFixedSize(true);
    listRecyclerView.setLayoutManager(new LinearLayoutManager(this));
    RecyclerItemAdapter recyclerItemAdapter = new RecyclerItemAdapter(createItems(), this);
    listRecyclerView.setAdapter(recyclerItemAdapter);
}

The above code will show bottom sheet on click,but also the sheet appears while dragging up on the layout.Is there something i missing up.Please help me!

like image 562
Selvam Avatar asked Apr 02 '16 11:04

Selvam


1 Answers

Thanks @oguzhand

 behavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
        @Override
        public void onStateChanged(@NonNull View bottomSheet, int newState) {
            // React to state change
            if (newState == BottomSheetBehavior.STATE_DRAGGING) {
                behavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
            }
        }

        @Override
        public void onSlide(@NonNull View bottomSheet, float slideOffset) {
            // React to dragging events
        }
    });

I can now disable the bottom sheet behavior when it is not shown.

like image 99
Selvam Avatar answered Oct 03 '22 01:10

Selvam