Xamarin 如何更改MvxDialogFragment布局
我想更改默认的AlertDialog布局大小 我创建了一个类:Xamarin 如何更改MvxDialogFragment布局,xamarin,xamarin.android,mvvmcross,android-alertdialog,Xamarin,Xamarin.android,Mvvmcross,Android Alertdialog,我想更改默认的AlertDialog布局大小 我创建了一个类: public class SampleDialog : MvxDialogFragment { public override Dialog OnCreateDialog(Bundle savedInstanceState) { var dialog = new AlertDialog.Builder(Context); dialog.SetView(View.Inflate(Cont
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>
尝试在OnCreateDialog方法、OnStart中设置版面宽度,或直接通过设置LinearLayout.layout_width属性设置版面宽度,但结果相同
如何进行配置?扩大布局 在对布局进行充气时,您可以使用默认充气器或Mvvmcross
binding充气
,这将应用您需要的任何xml绑定
默认充气机:
Mvvmcross xml绑定充气器:
调整版面大小
Dialog.Window.SetLayout()
接收200(宽度)和460(高度)的像素值,这两个像素的物理大小随设备屏幕分辨率的不同而不同
更好的方法是使用dp并将其转换为像素:
将所需尺寸标注添加到dimens.xml
<resources>
<dimen name="dialog_width">400dp</dimen>
<dimen name="dialog_height">200dp</dimen>
</resources>
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();
}
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();
}
<resources>
<dimen name="dialog_width">400dp</dimen>
<dimen name="dialog_height">200dp</dimen>
</resources>
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);
}