10

I want to scroll the view down when the bottom sheet is fully up (Dragged up to complete screen). It works good when it scrolls up but it does not work when it scrolls down. Rather, the whole bottom sheet comes down. Any way out?

Main Activity

import android.os.Bundle; import android.support.design.widget.BottomSheetBehavior; import android.support.design.widget.BottomSheetDialog; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.util.TypedValue; import android.view.View; import android.view.Menu; import android.view.MenuItem; import android.widget.Button; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button fab = (Button) findViewById(R.id.button); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { BottomSheetDialog bottomSheetDialog = new BottomSheetDialog(MainActivity.this); View parentView = getLayoutInflater().inflate(R.layout.sheetlayout,null); bottomSheetDialog.setContentView(parentView); BottomSheetBehavior bottomSheetBehavior = BottomSheetBehavior.from((View) parentView.getParent()); bottomSheetBehavior.setPeekHeight( (int) TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_DIP,100,getResources().getDisplayMetrics() ) ); bottomSheetDialog.show(); } }); } } 

SheetLayout.xml

<?xml version="1.0" encoding="utf-8"?> <ScrollView android:layout_height="match_parent" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:text="button1" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button1" /> <Button android:text="button2" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button2" /> <Button android:text="button3" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button3" /> <Button android:text="button4" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button4" /> <Button android:text="button5" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button5" /> <Button android:text="button6" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button18" /> <Button android:text="button7" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button7" /> <Button android:text="button8" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button8" /> <Button android:text="button9" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button9" /> <Button android:text="button10" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button10" /> <Button android:text="button11" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button11" /> <Button android:text="button12" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button12" /> <Button android:text="button13" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button13" /> <Button android:text="button14" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button14" /> <Button android:text="button15" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button15" /> <Button android:text="button16" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button16" /> <Button android:text="button17" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button17" /> <Button android:text="button18" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button6" /> </LinearLayout> </ScrollView> 

Edit1

<?xml version="1.0" encoding="utf-8"?> <ScrollView android:layout_height="match_parent" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"> <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" > <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:text="button1" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button1" /> <Button android:text="button2" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button2" /> <Button android:text="button3" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button3" /> <Button android:text="button4" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button4" /> <Button android:text="button5" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button5" /> <Button android:text="button6" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button18" /> <Button android:text="button7" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button7" /> <Button android:text="button8" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button8" /> <Button android:text="button9" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button9" /> <Button android:text="button10" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button10" /> <Button android:text="button11" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button11" /> <Button android:text="button12" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button12" /> <Button android:text="button13" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button13" /> <Button android:text="button14" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button14" /> <Button android:text="button15" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button15" /> <Button android:text="button16" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button16" /> <Button android:text="button17" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button17" /> <Button android:text="button18" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button6" /> </LinearLayout> </android.support.design.widget.CoordinatorLayout> </ScrollView> 

Edit2

<?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" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <ScrollView android:layout_width="match_parent" app:layout_behavior="android.support.design.widget.BottomSheetBehavior" android:layout_height="match_parent"> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="wrap_content" > <Button android:text="@string/button1" android:layout_width="match_parent" android:layout_height="0dp" android:id="@+id/button1" android:layout_weight="0.66" /> <Button android:text="button2" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button2" /> <Button android:text="button3" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button3" /> <Button android:text="button4" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button4" /> <Button android:text="button5" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button5" /> <Button android:text="button6" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button18" /> <Button android:text="button7" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button7" /> <Button android:text="button8" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button8" /> <Button android:text="button9" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button9" /> <Button android:text="@string/button10" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button10" /> <Button android:text="@string/button11" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button11" /> <Button android:text="@string/button12" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button12" /> <Button android:text="button13" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button13" /> <Button android:text="button14" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button14" /> <Button android:text="button15" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button15" /> <Button android:text="button16" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button16" /> <Button android:text="button17" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button17" /> <Button android:text="button18" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/button6" /> </LinearLayout> </ScrollView> </android.support.design.widget.CoordinatorLayout> 
1
  • Did you find a solution ? If yes, please share it. Commented Aug 5, 2021 at 14:13

5 Answers 5

15

I had same problem and fixed it using android.support.v4.widget.NestedScrollView. below is my code for bottom sheet layout

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:paddingBottom="8dp" android:paddingTop="8dp"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:clickable="true" android:foreground="?attr/selectableItemBackground" android:orientation="horizontal" android:paddingBottom="8dp" android:paddingLeft="@dimen/activity_margin" android:paddingRight="@dimen/activity_margin" android:paddingTop="8dp"> <ImageView android:layout_width="24dp" android:layout_height="24dp" android:layout_marginRight="32dp" android:src="@drawable/ic_email_black_24dp" android:tint="#737373" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:text="Email a Copy" android:textColor="#737373" android:textSize="16sp" /> </LinearLayout> <android.support.v4.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="match_parent"> <WebView android:id="@+id/webpage" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/colorPrimary"></WebView> </android.support.v4.widget.NestedScrollView> </LinearLayout> 
Sign up to request clarification or add additional context in comments.

Comments

8

What you just need to do is to change the ScrollView for a NestedScrollView.

Comments

2

So far I know normal Scroll View will not work with Bottom-sheet, while Scrolling down , Bottomsheet will also get down , which is not expected behavior !

Instead you can try NestedScrollView as below :

<?xml version="1.0" encoding="utf-8"?> <androidx.coordinatorlayout.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" > <androidx.core.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="match_parent" android:elevation="8dp" app:behavior_hideable="false" app:behavior_peekHeight="0dp" app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior"> <androidx.appcompat.widget.LinearLayoutCompat android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="16dp" android:text="Any Long Text" /> </androidx.appcompat.widget.LinearLayoutCompat> </androidx.core.widget.NestedScrollView> </androidx.coordinatorlayout.widget.CoordinatorLayout>

Comments

0

I had same problem and fixed it using androidx.core.widget.NestedScrollView below is my code for bottom sheet layout.

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto"> <androidx.core.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="match_parent" > <RelativeLayout android:layout_margin="10dp" android:layout_width="match_parent" android:layout_height="match_parent"> <!--Add your UI here --> </RelativeLayout> </androidx.core.widget.NestedScrollView> </ScrollView> 

Comments

0

Simply add an OnScrollChangeListener to your ScrollView and disable dragging when scrollView is not currently at y = 0.

 scrollView.setOnScrollChangeListener(new View.OnScrollChangeListener() { @Override public void onScrollChange(View v, int scrollX, int scrollY, int oldScrollX, int oldScrollY) { bottomSheetBehavior.setDraggable(scrollY == 0); } }); 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.