如何在 BottomSheetDialog 中的 GridView 中向上滚动?

How to scroll up in GridView that is in a BottomSheetDialog?

我创建了一个 BottomSheetDialog,里面有一个 GridView。打开BottomSheetDialog后,可以正常滚动向下。这样做会使 BottomSheetDialog 扩展到全屏并在 GridView 中正常向下滚动。

然而,当用户试图滚动向上GridView 不是向上滚动,而是 BottomSheetDialog 缩小并关闭。

我想要的是能够在 GridView 中上下滚动而不 BottomSheetDialog 改变大小。

怎么做?

我的代码:

final BottomSheetDialog dialog = new BottomSheetDialog(context);
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.grid, null);
dialog.setContentView(view);

grid.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent" android:layout_height="match_parent">

    <GridView
        android:background="#FFFFFF"
        android:id="@+id/gridview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:numColumns="3"
        android:stretchMode="columnWidth"
        android:horizontalSpacing="4dp"
        android:verticalSpacing="4dp"
        android:gravity="center"
        />

</LinearLayout>

已解决:

dialog.setOnShowListener(new DialogInterface.OnShowListener() {
                @Override
                public void onShow(final DialogInterface dialog) {
                    BottomSheetDialog d = (BottomSheetDialog) dialog;
                    FrameLayout bottomSheet = (FrameLayout) d.findViewById(android.support.design.R.id.design_bottom_sheet);
                    // Right here!
                    final BottomSheetBehavior behaviour = BottomSheetBehavior.from(bottomSheet);
                    behaviour.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
                        @Override
                        public void onStateChanged(@NonNull View bottomSheet, int newState) {
                            if (newState == BottomSheetBehavior.STATE_HIDDEN) {
                                dialog.dismiss();
                            }

                            if (newState == BottomSheetBehavior.STATE_DRAGGING) {
                                ((BottomSheetBehavior) behaviour).setState(BottomSheetBehavior.STATE_EXPANDED);
                            }
                        }

                        @Override
                        public void onSlide(@NonNull View bottomSheet, float slideOffset) {

                        }
                    });
                }
            });