2017-02-15 9 views
2

GridViewを持つBottomSheetDialogを作成しました。 BottomSheetDialogを開くと、が正常ににスクロールできます。これにより、BottomSheetDialogがフルスクリーンに展開され、通常GridViewにスクロールダウンされます。BottomSheetDialogにあるGridViewをスクロールするには?

ただし、ユーザがをスクロールしようとすると、が表示されます。 GridViewでスクロールする代わりに、BottomSheetDialogが縮小して閉じます。

BottomSheetDialogサイズを変更せずにGridViewに上下にスクロールすることができます。

どうすればよいですか?

マイコード:

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

         } 
        }); 
       } 
      }); 
関連する問題