3

これは BottomSheetDialog の私のレイアウトです。内部にもグリッドレイアウトがあります。そのグリッド レイアウトのスクロールは適切ではありません。つまり、BottomSheetDialog の展開状態でのみスクロールします。

<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();

グリッド レイアウトのスクロールを修正できるように、ダイアログの動作にどのようにアクセスできますか、またはそれを修正する他の方法はありますか?

すべてを明確にするために: ボトムシートの状態に関係なく、グリッドビューのスクロールを毎回有効にする必要があります。

4

2 に答える 2

7

グリッド ビューのスクロールは、ボトム シートの状態に関係なく、常に有効にする必要があります。

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

    }
};
于 2016-05-19T13:22:04.040 に答える
-1

あなたができる(Kotlin):

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

    if (behavior is BottomSheetBehavior) {
        behavior.doStuff()
    }
于 2016-05-19T11:48:17.083 に答える