-
茅侃侃
BottomSheetDialogFragment:override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) val offsetFromTop = 200 (dialog as? BottomSheetDialog)?.behavior?.apply { isFitToContents = false setExpandedOffset(offsetFromTop) state = BottomSheetBehavior.STATE_EXPANDED }}
-
白衣非少年
你可以这样做:public class MyBottomSheetDialog extends BottomSheetDialogFragment { //.... @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; setupRatio(bottomSheetDialog); } }); return dialog; } private void setupRatio(BottomSheetDialog bottomSheetDialog) { //id = com.google.android.material.R.id.design_bottom_sheet for Material Components //id = android.support.design.R.id.design_bottom_sheet for support librares FrameLayout bottomSheet = (FrameLayout) bottomSheetDialog.findViewById(R.id.design_bottom_sheet); BottomSheetBehavior behavior = BottomSheetBehavior.from(bottomSheet); ViewGroup.LayoutParams layoutParams = bottomSheet.getLayoutParams(); layoutParams.height = getBottomSheetDialogDefaultHeight(); bottomSheet.setLayoutParams(layoutParams); behavior.setState(BottomSheetBehavior.STATE_EXPANDED); } private int getBottomSheetDialogDefaultHeight() { return getWindowHeight() * 85 / 100; } private int getWindowHeight() { // Calculate window height for fullscreen use DisplayMetrics displayMetrics = new DisplayMetrics(); ((Activity) getContext()).getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); return displayMetrics.heightPixels; }}
-
蝴蝶刀刀
始终展开到完整高度可以在BottomSheetDialogFragment()的onCreateDialog中设置 override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { val dialog = BottomSheetDialog(requireContext(), theme) dialog.behavior.state = BottomSheetBehavior.STATE_EXPANDED dialog.behavior.skipCollapsed = true return dialog}最大高度可以在onCreateView中设置 override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View? { val view = inflater.inflate(R.layout.bottom_sheet_dialog, container, false) // Set max height to half screen view.findViewById<ConstraintLayout>(R.id.root_layout_of_bottom_sheet).maxHeight = (resources.displayMetrics.heightPixels * 0.5).toInt() return view }
-
明月笑刀无情
在 Kotlin 和 Jetpack 中编写:val configuration = LocalConfiguration.currentval screenWidth = configuration.screenWidthDp.divideToPercent(0.40f) // total screen width size of 40 percentageval screenHeight = configuration.screenHeightDp.divideToPercent(0.95f) // total screen height size of 95 percentageconfiguration.screenWidth --> 给出屏幕尺寸divideToPercent(0.40f) --> 它将给出屏幕上的一些百分比
-
白衣染霜花
非常容易处理开始吧override fun onStart() { super.onStart() val height = Resources.getSystem().displayMetrics.heightPixels // in this case I want set max height half of the device height val maxHeight = (height * 0.5).toInt() val behaviour = BottomSheetBehavior.from(requireView().parent as View) /* Note that If you want to display max height as per your bottomsheet view val maxHeight = WindowManager.LayoutParams.MATCH_PARENT */ // now set your max peek height behavior.peekHeight = maxHeight }从上面的情况来看,如果你设置maxHeight = WindowManager.LayoutParams.MATCH_PARENT当您在bottmsheet上显示一些固定的内容时,这很简单onCreateView但是有时如果更新UI后Main Thread 它可能不会显示实际高度有时那么最好使用viewTreeObserveroverride fun onStart() { super.onStart() view?.viewTreeObserver?.addOnGlobalLayoutListener { val behavior = BottomSheetBehavior.from(view!!.parent as View) behavior.peekHeight = WindowManager.LayoutParams.MATCH_PARENT }}
-
斯蒂芬大帝
尝试这个 : DisplayMetrics displayMetrics = context.getResources().getDisplayMetrics(); int height = displayMetrics.heightPixels; int maxHeight = (int) (height*0.80); View bottomSheet = findViewById(R.id.bottom_sheet); BottomSheetBehavior behavior = BottomSheetBehavior.from(bottomSheet); behavior.setPeekHeight(maxHeight);并在您的 XML 中:<LinearLayout android:id="@+id/bottom_sheet" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" app:behavior_hideable="true" app:layout_behavior="android.support.design.widget.BottomSheetBehavior" . . .</LinearLayout>