2016-11-01 9 views
0

Я хочу изменить размер макета AlertDialog по умолчанию.Как изменить MvxDialogFragment layout

Я создал класс:

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, ""); 

судимых установить ширину макета в 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), которые будут различаться по физическому размеру с различными разрешениями экрана устройства.

Лучше было бы использовать дп и преобразовать его в пикселях:

Добавьте нужные размеры размера вашей 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); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^