2016-11-01 89 views
0

我想更改AlertDialog的默认布局大小。如何更改MvxDialogFragment布局

我创建的类:

public class SampleDialog : MvxDialogFragment 
{ 
    public override Dialog OnCreateDialog(Bundle savedInstanceState) 
    { 
     var dialog = new AlertDialog.Builder(Context); 
     dialog.SetView(View.Inflate(Context,Resource.Layout.SampleDialog,null)); 

     return dialog.Create(); 
    } 

    public override void OnStart() 
    { 
     if (Dialog == null) { return; } 

     Dialog.Window.SetLayout(200,460); 
     base.OnStart(); 
    } 
} 

,它的布局:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="@string/text1" /> 
    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="@string/text2" /> 
</LinearLayout> 

而且我创建从片段视图对话框:

var dialog = new SampleDialog 
{ 
    ViewModel = ViewModel, 
    Cancelable = true 
}; 

dialog.Show(FragmentManager, ""); 

Tryed设置布局宽度OnCreateDialog方法,OnStart,或直接通过设置LinearLayout.layout_width属性,但结果是相同的。

这是怎么配置的?

回答

1

充气布局

当充气的布局,可以让使用默认的充气或Mvvmcross BindingInflate的,这将适用于您所需要的任何XML绑定。

默认充气机:

public override Dialog OnCreateDialog(Bundle savedInstanceState) 
{ 
    base.EnsureBindingContextSet(savedInstanceState); 

    var dialog = new AlertDialog.Builder(Context); 
    dialog.SetView(Activity.LayoutInflater.Inflate(Resource.Layout.SampleDialog, null)); 

    return dialog.Create(); 
} 

Mvvmcross XML绑定充气机:

public override Dialog OnCreateDialog(Bundle savedInstanceState) 
{ 
    base.EnsureBindingContextSet(savedInstanceState); 

    var dialog = new AlertDialog.Builder(Context); 
    dialog.SetView(this.BindingInflate(Resource.Layout.SampleDialog, null)); 

    return dialog.Create(); 
} 

上浆布局

Dialog.Window.SetLayout()取入的像素值为200(宽度)和460(hei ght),这将根据不同的设备屏幕分辨率在物理尺寸上有所不同。

一个更好的办法是使用DP并将其转换为像素:

所需的大小尺寸添加到您的dimens.xml

<resources> 
    <dimen name="dialog_width">400dp</dimen> 
    <dimen name="dialog_height">200dp</dimen> 
</resources> 

更新您的SampleDialog

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

    var width = Resources.GetDimension(Resource.Dimension.dialog_width); 
    var height = Resources.GetDimension(Resource.Dimension.dialog_height); 

    Dialog.Window.SetLayout((int)width, (int)height); 
}