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>
If you wish to have a bottom sheet that has a scrollable child such as a ListView or a GridView and have the bottom sheet be draggable, you should set this parameter to true. The useRootNavigator parameter ensures that the root navigator is used to display the BottomSheet when set to true .
Here's how you can use it: Open a webpage in a browser on your Android device. Make sure the webpage is long enough so that the browser shows a scroll bar. Once there, to get to the bottom of the page, simply tap the top right corner on your device.
Flexible and scrollable bottom sheet. All you have to do is call showFlexibleBottomSheet() and you'll get a popup that looks like a modal bottom sheet and can be resized by dragging it up and down and scrolled when expanded.
NestedScrollView is just like ScrollView , but it supports acting as both a nested scrolling parent and child on both new and old versions of Android. Nested scrolling is enabled by default.
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>
What you just need to do is to change the ScrollView
for a NestedScrollView
.
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>
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With