Проблема с ориентацией диалога, когда он открыт - PullRequest
0 голосов
/ 09 июля 2020

Я хочу создать диалог с горизонтальными кнопками на экране, горизонтальными и вертикальными кнопками на вертикальном экране. Я добавил эти два xmls в Ресурсы (нормальный вид [макет] и альбомный [макет]). Когда я открываю это диалоговое окно, все работает хорошо (по вертикали и горизонтали все выглядит так, как должно), однако, когда я открываю диалоговое окно и поворачиваю экран. Диалог вращается правильно, но кнопки остаются в том же состоянии, что и при открытии (не загружает второй xml файл).

Кто-нибудь знает, что может быть не так?

var dialog = new SingleAlertDialog();
dialog.Show(activitiesTop, "tag");

Диалог:

    public class SingleAlertDialog : DialogFragment
{
    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        if (inflater == null) throw new ArgumentNullException(nameof(inflater));

        base.OnCreateView(inflater, container, savedInstanceState);

        var view = inflater.Inflate(Resource.Layout.general_dialog, container, false);

        return view;
    }
}

Я нашел решение, в котором вы можете использовать OnConfigurationChanged, но у меня проблема с ориентацией при запуске диалога

1 Ответ

0 голосов
/ 10 июля 2020

Если вы просто хотите изменить макет при изменении ориентации, не нужно использовать OnConfigurationChanged.

Вы можете создать папку layout-land под Resources папкой и добавить general_dialog.xml (с тем же имя внизу layout) внутри:

введите описание изображения здесь

Теперь макет диалогового окна будет меняться в зависимости от ориентации при открытии.

Примечание : Это должно быть протестировано на физическом устройстве.

========================== Обновление ====================== =======

Если необходимо использовать метод OnConfigurationChanged для выполнения особых действий при изменении ориентации,

public override void OnConfigurationChanged(Configuration newConfig)
{
    base.OnConfigurationChanged(newConfig);
    // Checks the orientation of the screen
    if (newConfig.Orientation == Android.Content.Res.Orientation.Portrait)
    {
        System.Console.WriteLine("Portrait");
    }
    else if (newConfig.Orientation == Android.Content.Res.Orientation.Landscape)
    {
        System.Console.WriteLine("Landscape");
    }
}

Nedd добавить ConfigurationChanges внутри Activity следующим образом:

[Activity(Label = "@string/app_name", Theme = "@style/AppTheme", MainLauncher = true,ConfigurationChanges =Android.Content.PM.ConfigChanges.Orientation|Android.Content.PM.ConfigChanges.ScreenSize)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...