bottomSheetDialogFragment full screen
In your custom BottomSheetDialogFragment
you can use something like:
@NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { Dialog dialog = super.onCreateDialog(savedInstanceState); dialog.setOnShowListener(new DialogInterface.OnShowListener() { @Override public void onShow(DialogInterface dialogInterface) { BottomSheetDialog bottomSheetDialog = (BottomSheetDialog) dialogInterface; setupFullHeight(bottomSheetDialog); } }); return dialog; } private void setupFullHeight(BottomSheetDialog bottomSheetDialog) { FrameLayout bottomSheet = (FrameLayout) bottomSheetDialog.findViewById(R.id.design_bottom_sheet); BottomSheetBehavior behavior = BottomSheetBehavior.from(bottomSheet); ViewGroup.LayoutParams layoutParams = bottomSheet.getLayoutParams(); int windowHeight = getWindowHeight(); if (layoutParams != null) { layoutParams.height = windowHeight; } bottomSheet.setLayoutParams(layoutParams); behavior.setState(BottomSheetBehavior.STATE_EXPANDED); } private int getWindowHeight() { // Calculate window height for fullscreen use DisplayMetrics displayMetrics = new DisplayMetrics(); ((Activity) getContext()).getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); return displayMetrics.heightPixels; }
Sorry for the late answer but in your custom BottomSheetDialogFragment you can set match_parent
to layout params of bottom sheet view like this:
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { val dialog = BottomSheetDialog(requireContext(), theme) dialog.setOnShowListener { val bottomSheetDialog = it as BottomSheetDialog val parentLayout = bottomSheetDialog.findViewById<View>(com.google.android.material.R.id.design_bottom_sheet) parentLayout?.let { it -> val behaviour = BottomSheetBehavior.from(it) setupFullHeight(it) behaviour.state = BottomSheetBehavior.STATE_EXPANDED } } return dialog}private fun setupFullHeight(bottomSheet: View) { val layoutParams = bottomSheet.layoutParams layoutParams.height = WindowManager.LayoutParams.MATCH_PARENT bottomSheet.layoutParams = layoutParams}
Setting height to match_parent
helps your dialog to be drawn above the inset of Navigation bar
You can do it by setting peekHeight
of BottomSheetBehavior
to be equal to Resources.getSystem().getDisplayMetrics().heightPixels
:
@Overridepublic Dialog onCreateDialog(Bundle savedInstanceState) { BottomSheetDialog bottomSheetDialog=(BottomSheetDialog)super.onCreateDialog(savedInstanceState); bottomSheetDialog.setOnShowListener(dialog -> { BottomSheetDialog dialogc = (BottomSheetDialog) dialog; // When using AndroidX the resource can be found at com.google.android.material.R.id.design_bottom_sheet FrameLayout bottomSheet = dialogc.findViewById(android.support.design.R.id.design_bottom_sheet); BottomSheetBehavior bottomSheetBehavior = BottomSheetBehavior.from(bottomSheet); bottomSheetBehavior.setPeekHeight(Resources.getSystem().getDisplayMetrics().heightPixels); bottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED); }); return bottomSheetDialog;}