如何使BottomSheetDialogFragment覆盖整个屏幕?

6

我正在使用BottomSheetDialogFragment来展示一些数据。但是当我启动fragment时,它只会出现在屏幕的50%位置。所以我的问题是如何让它在展示时全屏。

BottomSheetDialogFragment 代码:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.bot_frag, container, false);
    TextView tv = v.findViewById(R.id.textVi);
    back=v.findViewById(R.id.back_of_bot);
    back.setOnClickListener(
            new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    dismiss();
                }
            }
    );
    return v;
}

1
那么您不需要一个BottomDialogFragment。您需要的是一个普通的DialogFragment。 - Phantômaxx
3个回答

2
您可以使用对话框片段,具体请参考以下内容:

您可以使用对话框片段,具体请参考此处:

public class DialogFragments extends DialogFragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);
        View view = inflater.inflate(R.layout.dialog_dialogfragment_layout, null);
        getDialog().setTitle("Title");
        return view;
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        DisplayMetrics metrics = new DisplayMetrics();
        getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics);
        getDialog().getWindow().setGravity(Gravity.BOTTOM);
        getDialog().getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, (int) (metrics.heightPixels * 0.30));// here i have fragment height 30% of window's height you can set it as per your requirement
        getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        getDialog().getWindow().getAttributes().windowAnimations = R.style.DialogAnimationUpDown;

}

当您想打开时,可以像这样打开 Bottomsheet 对话框:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View v = inflater.inflate(R.layout.bot_frag, container, false);
    TextView tv = v.findViewById(R.id.textVi);
    back=v.findViewById(R.id.back_of_bot);
    back.setOnClickListener(
            new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                   FragmentManager fm = getFragmentManager();
                   DialogFragments dialogFragment = new DialogFragments(this);
                   dialogFragment.show(fm, "Bottomsheet Fragment");
                }
            }
    );
    return v;
}

2

你需要将这个样式应用到你的 BottomSheetDialogFragment

android.R.style.Theme_Material_Light_NoActionBar_Fullscreen

它需要最低的SDK版本为21。 - Marzi Heidari

0

这个解决方案适用于BottomSheetDialogFragment。我没有在其他类型的底部视图上进行测试。你需要做两件事:

  1. 将底部视图的根视图的最小高度设置为你的显示器的高度
container?.minimumHeight = Resources.getSystem().displayMetrics.heightPixels
  1. 在您的BottomSheetDialogFragment中覆盖主题以返回此样式
override fun getTheme(): Int {
    return R.style.Theme_Design_BottomSheetDialog
}

第一步是将底部表单的高度设置为您的显示器高度。第二步是将底部表单主题设置为填充宽度的主题 - 这在平板电脑上更为重要。现在,您拥有了一个全屏底部表单。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接