繁体   English   中英

如何在适配器 kotlin 中打开全屏底部对话框

[英]How to open full screen bottom dialog in Adapter kotlin

我如何在全屏模式下打开底部对话框。但每当我点击它时,它只会打开半屏视图,而不是滚动到全屏。但还有一件事是适配器 class

    var flashAlertPopUp = FareDetailBottomSheet(data.fare_details)
    flashAlertPopUp.show(childFragmentManager, "")

在您的孩子BottomSheetDialogFragment中覆盖setupDialog()以将其设置为随着屏幕尺寸的高度展开,如下所示:

override fun setupDialog(dialog: Dialog, style: Int) {
    super.setupDialog(dialog, style)
    val parentView = rootView.parent as View
    val params = parentView.layoutParams as CoordinatorLayout.LayoutParams
    val behavior = params.behavior
    if (behavior != null && behavior is BottomSheetBehavior<*>) {
        behavior.state = BottomSheetBehavior.STATE_EXPANDED
        behavior.peekHeight = requireContext().screenSize.y
    }
}

val Context.screenSize: Point
    get() = Point().also {
        (getSystemService(Context.WINDOW_SERVICE) as? WindowManager)?.defaultDisplay?.getSize(it)
    }


在 Java 代码中:

public class FareDetailBottomSheet extends BottomSheetDialogFragment {

    private View rootView;

    @SuppressLint("RestrictedApi")
    @Override
    public void setupDialog(@NonNull Dialog dialog, int style) {
        super.setupDialog(dialog, style);
        // layoutResId: your layout resource id
        rootView = View.inflate(requireContext(), layoutResId, null);
        dialog.setContentView(rootView);
        onInitViews();

        View parentView = (View) rootView.getParent();
        CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) parentView.getLayoutParams();
        CoordinatorLayout.Behavior behavior = params.getBehavior();
        if (behavior instanceof BottomSheetBehavior) {
            ((BottomSheetBehavior) behavior).setState(BottomSheetBehavior.STATE_EXPANDED);
            ((BottomSheetBehavior) behavior).setPeekHeight(getScreenSize().y);
        }
    }

    private void onInitViews() {
        // do your initialization here...
        // for example:
        // TextView textView = rootView.findViewById(R.id.textView);
    }

    private Point getScreenSize() {
        Point point = new Point();
        WindowManager wm = (WindowManager) requireContext().getSystemService(Context.WINDOW_SERVICE);
        if (wm.getDefaultDisplay() != null) {
            wm.getDefaultDisplay().getSize(point);
        }
        return point;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM