2016-05-19 7 views
1

これはBottomSheetDialogのレイアウトです。私はグリッドレイアウトも内部に持っています。そのグリッドレイアウトのスクロールは適切ではありません。つまり、BottomSheetDialogの展開状態でのみスクロールします。BottomSheetDialogからBottomSheetBehaviourを取得

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    app:layout_behavior="@string/bottom_sheet_behavior" 
    > 

    <LinearLayout 
     android:id="@+id/ll" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:padding="@dimen/view_padding_medium" 
     android:gravity="center_vertical"> 

     <ImageView 
      android:layout_width="@dimen/profile_image" 
      android:layout_height="@dimen/profile_image" 
      android:src="@drawable/icon" /> 

     <TextView 
      android:id="@+id/title1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginLeft="@dimen/view_padding_medium" 
      android:text="@string/smart_action_share" 
      android:textColor="@color/white" 
      /> 
    </LinearLayout> 



    <GridView 
     android:id="@+id/gridView11" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:numColumns="3" 
     > 

    </GridView> 


</LinearLayout> 

これは私が底面シートダイアログを作成しています方法です:

私は、グリッドレイアウトのスクロールを修正することができますまたは他の方法があるように、ダイアログの動作がアクセスすることができますどのように
BottomSheetDialog bottomSheetDialog = new BottomSheetDialog(context); 
     LayoutInflater inflater = ((Activity) Constants.getContext()).getLayoutInflater(); 

     View view = inflater.inflate(R.layout.dialog_share1, null); 

     bottomSheetDialog.setContentView(view); 

    final GridView grid = (GridView) view.findViewById(R.id.gridView11); 

    CustomAdapter adapter = new CustomAdapter (context); 
    grid.setAdapter(adapter); 

    bottomSheetDialog.show(); 

それを修正するの?

グリッドビューのスクロールは、下のシートの状態に関係なく毎回有効にする必要があります。あなたが行うことができます

+0

は、グリッドビューがスクロールしませせます。 –

+0

全体のポイントは、底部シートの状態に関係なく毎回グリッドビューのスクロールを可能にすることです。 –

+0

@DhawalSodhaParmarどのような提案? –

答えて

4

グリッド表示のスクロールは、ボトムシートの状態 に関わらず、毎回を有効にする必要があります。

BottomSheetの高さがコンテンツの高さと一致する必要があるため、これを行う必要はありません。

コンテンツがスクロール可能で親の高さを超えている場合、スクロールはBottomSheetがデフォルトの動作のために展開された場合にのみ有効です。

行動へのアクセス権を持っているために、あなたが行うことができます。その後、

View view = inflater.inflate(R.layout.dialog_share1, null); 
bottomSheetDialog.setContentView(view); 

BottomSheetBehavior behavior = BottomSheetBehavior.from((View) view.getParent()); 

とし、拡大は異なる状態での動作をカスタマイズする:

behavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() { 

    @Override 
    public void onStateChanged(@NonNull View bottomSheet, 
      @BottomSheetBehavior.State int newState) { 
     if (newState == BottomSheetBehavior.STATE_HIDDEN) { 
      dismiss(); 
     }else{ 
      if (newState != BottomSheetBehavior.STATE_EXPANDED) { 
       // Implement your logic here 
      } 
     } 
    } 

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

    } 
}; 
+0

ボトムシートが展開状態でないときはいつでもグリッドレイアウトの位置を0に設定するために何かできますか?問題は、1つのフルスクリーンに収まるよりも多くの要素がグリッドレイアウトにあることです。ボトムシートが展開された状態で下にスクロールしてボトムシートを折りたたまれていない状態にドラッグすると、スクロールのために上部の要素が部分的に隠されてしまい、現在スクロールできないため、トップの要素も表示されるようにスクロールアップします。 –

+1

私は、グリッドレイアウトの代わりにグリッドレイアウトマネージャでRecyclerViewを使用することで問題を取り除きました。 –

+0

カスタムBottomSheetCallbackを使用して、その動作をカスタマイズすることができます。 例で元の回答を編集します。 –

-1

(Kotlin):

val params = ((view.parent as View).layoutParams as CoordinatorLayout.LayoutParams) 
    val behavior = params.behavior 

    if (behavior is BottomSheetBehavior) { 
     behavior.doStuff() 
    } 
関連する問題