Диалог Ширина фрагмента и высота игнорируются - PullRequest
0 голосов
/ 11 июля 2019

Как мне установить ширину и высоту фрагмента диалога? Все, что я прочитал, говорит о необходимости переопределить метод OnStart следующим образом:

    public override void OnStart()
    {
        if (Dialog == null)
        {
            return;
        }
        int dialogWidth = 300;
        int dialogHeight = 75;
        Dialog.Window.SetLayout(dialogWidth, dialogHeight);
    }

Когда я делаю это, приложение вылетает, я не могу перехватить ошибку, так как, очевидно, она выходит за пределы кода, который я пишу. Без этого переопределения диалоговое окно появляется и работает как ожидалось.

Это мой макет:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    android:minWidth="300dp" 
    android:minHeight="75dp">
    <TextView
        android:text="Select section."
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textAlignment="center" 
        android:textStyle="bold"
        android:id="@+id/textView2" />
    <Spinner
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textAlignment="center"
        android:id="@+id/my_spinner" />
    <Button
        android:text="Ok"
        android:layout_width="200px"
        android:layout_gravity="center"
        android:layout_height="34.5dp"
        android:id="@+id/button_ok" />
</LinearLayout>

Видимо, настройки android:minWidth и android:minHeight игнорируются, так как все, что я получаю, это крошечный диалог.

Ответы [ 2 ]

1 голос
/ 11 июля 2019

C # эквивалент кода Мехмеда:

    public override void OnResume()
    {
        int width = 300; 
        int height = 75; 
        base.OnResume();
    }

Я обнаружил, что большая часть кода, размещенного в Stack Overflow для Xamarin, - это java-код, я использую c # (Visual Studio 2017) и абсолютно ничего не знаю о java, и мне сложно конвертировать в c #, к сожалению, так. Когда я вижу код Java в ответе, я обычно просто пропускаю его. Но, видя, как я задал вопрос, а Мехмед был достаточно любезен, чтобы предложить рабочее решение, я почувствовал необходимость опубликовать конверсию на c #.

Вы заметите, что я решил не помещать значения в dimens.xml, я не фанат хранения значений во "внешнем по отношению к файлу кода", а затем извлекать их в коде, имеет тенденцию делать отладку, которая гораздо сложнее в разы. Все, что происходит, когда вы делаете это, это то, что компилятор заменяет строку кода значением в сгенерированном файле obj, оооочень .. зачем это делать?

Учитывая, что эти значения никогда не изменятся, я не видел смысла вводить их в dimens.xml, во что бы то ни стало убедить меня в обратном!

0 голосов
/ 11 июля 2019

Размеры лучше определять в dimens.xml в папке values:

<resources>
    ...
    <dimen name="dialog_min_width">300dp</dimen>
    <dimen name="dialog_min_height">75dp</dimen>
    ...
</resources>

Вы можете обновить onResume() метод вашего DialogFragment следующим образом и попробовать:

public void onResume() {
    int width = getResources().getDimensionPixelSize(R.dimen.dialog_min_width);
    int height = getResources().getDimensionPixelSize(R.dimen.dialog_min_height);        
    getDialog().getWindow().setLayout(width, height);
    super.onResume();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...