如何在 Xamarin 中设置 DialogFragment 大小?

How to set DialogFragment size in Xamarin?

我正在尝试设置自定义 DialogFragment 的大小。我正在尝试这样的事情:

class ChannelEdit : DialogFragment
{
    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        base.OnCreateView(inflater, container, savedInstanceState);
        var view = inflater.Inflate(Resource.Layout.ChannelEdit, container, false);
        DisplayMetrics dm = new DisplayMetrics();
        this.Dialog.Window.WindowManager.DefaultDisplay.GetMetrics(dm);
        int width = dm.WidthPixels;
        int height = dm.HeightPixels;
        this.Dialog.Window.SetLayout((int)width / 2, (int)height / 2);   
        return view;
    }
}

但是它不起作用。我没有收到任何错误。你能帮我解决这个问题吗?

设置根元素的布局参数:

int width = this.Resources.DisplayMetrics.WidthPixels;
int height = this.Resources.DisplayMetrics.HeightPixels
rootLayout.setLayoutParams (new LinearLayout.LayoutParams (width, height));
    public override void OnActivityCreated(Bundle savedInstanceState)
    {
        this.Dialog.Window.RequestFeature(WindowFeatures.NoTitle);
        this.Dialog.Window.SetGravity(GravityFlags.Center);
        base.OnActivityCreated(savedInstanceState);
        int Width = (Resources.DisplayMetrics.WidthPixels) - 150;
        int Height = (Resources.DisplayMetrics.HeightPixels) - 70;
        this.Dialog.Window.Attributes.Width = Width;
        this.Dialog.Window.Attributes.Height = Height;
    }

您必须在 OnResume 中设置值(这不直观,但效果很好)。我也有尊重密度的代码,让你严格控制大小,不管密度如何。

    public override void OnResume()
    {
        base.OnResume();

        var window = Dialog.Window;
        var requestedWidth = (int)(350 * (this.Resources.DisplayMetrics.Density));
        var requestedHeight = (int)(175 * (this.Resources.DisplayMetrics.Density));

        window.SetLayout(requestedWidth, requestedHeight);
        window.SetGravity(GravityFlags.Center);           
    }