2017-02-15 53 views
2

我创建了一个BottomSheetDialog,其中有一个GridView。当BottomSheetDialog打开时,您可以正常滚动向下。这样做会使BottomSheetDialog扩展为全屏幕并正常向下滚动GridView如何在BottomSheetDialog中的GridView中向上滚动?

但是当用户试图滚动向上;而不是滚动在GridViewBottomSheetDialog缩小和关闭。

我想要的是能够在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> 

回答

2

解决:

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) { 

         } 
        }); 
       } 
      }); 
相关问题