web-dev-qa-db-ja.com

BottomSheetDialogFragmentが半分開きます

私のBottomSheetDialogFragmentを開くと、半分(完全にではない)が開きます。

fragment.show(supportFragmentManager, "my_frag")
  • NestedScrollViewbehavior_peekHeightで試しましたが、うまくいきませんでした。
  • NestedScrollViewなしで試しました。 LinearLayoutのみ。
  • match_parentwrap_contentの間で高さを切り替えてみました

RecyclerViewレイアウトに単純なBottomSheetDialogFragmentがあります。

<Android.support.v4.widget.NestedScrollView
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content">

        <LinearLayout
            ...
            >
           <Android.support.v7.widget.RecyclerView
           ...
           />
5
Khemraj

BottomSheetFragmentは、BottomSheetDialogFragmentを意味します。使用済みのシートを開くには、onCreateDialog()に変更を加える必要があります。

 @Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    BottomSheetDialog bottomSheetDialog=(BottomSheetDialog)super.onCreateDialog(savedInstanceState);
    bottomSheetDialog.setOnShowListener(new DialogInterface.OnShowListener() {
        @Override
        public void onShow(DialogInterface dialog) {
            BottomSheetDialog dialog = (BottomSheetDialog) dialog;
            FrameLayout bottomSheet =  dialog .findViewById(Android.support.design.R.id.design_bottom_sheet);
            BottomSheetBehavior.from(bottomSheet).setState(BottomSheetBehavior.STATE_EXPANDED);
            BottomSheetBehavior.from(bottomSheet).setSkipCollapsed(true);
            BottomSheetBehavior.from(bottomSheet).setHideable(true);
        }
    });
    return bottomSheetDialog;
}

レイアウトはそのままにしてくださいmatch_parentNestedScrollViewを使用する必要はありません。それは私のために働いた。それでも問題が解決しない場合はお知らせください。

新しいマテリアルライブラリを使用している場合。それは
implementation 'com.google.Android.material:material:1.0.0'。次に、Parent FrameLayoutのIDを変更する必要があります。ですから。

 @Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    BottomSheetDialog bottomSheetDialog=(BottomSheetDialog)super.onCreateDialog(savedInstanceState);
    bottomSheetDialog.setOnShowListener(new DialogInterface.OnShowListener() {
        @Override
        public void onShow(DialogInterface dia) {
            BottomSheetDialog dialog = (BottomSheetDialog) dia;
            FrameLayout bottomSheet =  dialog .findViewById(com.google.Android.material.R.id.design_bottom_sheet);
            BottomSheetBehavior.from(bottomSheet).setState(BottomSheetBehavior.STATE_EXPANDED);
            BottomSheetBehavior.from(bottomSheet).setSkipCollapsed(true);
            BottomSheetBehavior.from(bottomSheet).setHideable(true);
        }
    });
    return bottomSheetDialog;
}

この場合、import com.google.Android.materialからのすべてのインポートを確認してください。

7
ADM

親ビューにアクセスしているため、以下のコードを使用してビューを全画面に展開します。

View parent = (View) inflatedView.getParent();
parent.setFitsSystemWindows(true);
BottomSheetBehavior bottomSheetBehavior = BottomSheetBehavior.from(parent);
inflatedView.measure(0, 0);
DisplayMetrics displaymetrics = new DisplayMetrics();        getActivity().getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int screenHeight = displaymetrics.heightPixels;
bottomSheetBehavior.setPeekHeight(screenHeight);

if (params.getBehavior() instanceof BottomSheetBehavior) {
    ((BottomSheetBehavior)params.getBehavior()).setBottomSheetCallback(mBottomSheetBehaviorCallback);
}

params.height = screenHeight;
parent.setLayoutParams(params);

お役に立てば幸いです。

1
Jyubin Patel