Почему элементы управления становятся неотцентрованными после добавления индикатора активности

Я играл с индикаторами активности, пытаясь добавить их в свои представления, центрировать их, накладывать поверх других элементов управления и т. д.

Принятый ответ в этом другом потоке (Xamarin Forms: как исправить индикатор активности в центре экрана в прокрутке) показывает мне, как все это делать, поэтому я добавил его в тестовый проект для проверки.

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

Вот мой XAML в моем тестовом проекте:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
         xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
         xmlns:d="http://xamarin.com/schemas/2014/forms/design"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
         mc:Ignorable="d"
         x:Class="ActivityIndicator.MainPage">

<AbsoluteLayout HorizontalOptions="FillAndExpand"
                VerticalOptions="FillAndExpand">
        <StackLayout HorizontalOptions="CenterAndExpand"
                     VerticalOptions="CenterAndExpand">
            <!-- Place new controls here -->
            <Label Text="Welcome to Xamarin.Forms!" 
               HorizontalOptions="CenterAndExpand"
               VerticalOptions="CenterAndExpand" />

            <Button Text="Button1"
                    HorizontalOptions="CenterAndExpand"
                    VerticalOptions="CenterAndExpand"/>
        </StackLayout>

    <AbsoluteLayout BackgroundColor="#22000000"
                AbsoluteLayout.LayoutBounds="0.5,0.5,1,1"
                AbsoluteLayout.LayoutFlags="All"
                IsVisible="True">
        <ActivityIndicator Color="Black"
                       AbsoluteLayout.LayoutBounds="0.5,0.5,0.1,0.1"
                       AbsoluteLayout.LayoutFlags="All"
                       IsVisible="True"
                       IsRunning="True"/>
    </AbsoluteLayout>
</AbsoluteLayout>

enter image description here


person user1818298    schedule 02.01.2020    source источник
comment
Вы должны правильно расположить Absolute LayoutBound. Абсолютный макет пробовали это (Acr) вам будет легко с ним работать? Как использовать   -  person Bharath    schedule 02.01.2020
comment
спасибо Бхарат. есть ли способ связать это с индикатором активности с помощью IsBusy? в примере показан весь код, привязанный непосредственно к кнопке, а затем его отображение в течение установленного срока, поэтому я запутался, как мне преобразовать это для работы с моим приложением.   -  person user1818298    schedule 02.01.2020
comment
Я действительно думаю, что понял это. я попробую. спасибо Бхарат   -  person user1818298    schedule 02.01.2020
comment
@user1818298 user1818298, что-нибудь обновится, если мой ответ поможет вам, не забудьте отметить мой ответ как ответ, спасибо.   -  person Cherry Bu - MSFT    schedule 13.01.2020


Ответы (2)


У меня была такая же проблема, и я решил ее следующим образом. Я создал метод в моей базе моделей представлений, который инкапсулирует выполнение действия.

`protected async Task ExecuteAndWait(Action action)
    {
        var popup = new PopupWaiting();
        IPopupNavigation ipn = PopupNavigation.Instance;
        await ipn.PushAsync(popup);
        action.Invoke();
        await ipn.RemovePageAsync(popup);
    }`

Я использую плагин Rg.Plugins.Popup.Contracts для управления уровнем загрузки. Преимущество этой модели в том, что не нужно менять файл xaml.

person Filipe Piletti Plucenio    schedule 10.03.2020

Согласно вашему описанию, вы просто хотите поместить ActivityIndicator в центр экрана, я делаю один образец, который вы можете посмотреть:

<RelativeLayout HorizontalOptions="CenterAndExpand" VerticalOptions="CenterAndExpand">
        <Grid
            x:Name="SegmentGrid"
            HorizontalOptions="CenterAndExpand"
            VerticalOptions="CenterAndExpand">
            <Grid.RowDefinitions>
                <RowDefinition Height="*" />
                <RowDefinition Height="*" />


            </Grid.RowDefinitions>
            <Label Text="Welcome to Xamarin.Forms!" />

            <Button Grid.Row="1" Text="Button1" />
            <ActivityIndicator
                Grid.RowSpan="2"
                HorizontalOptions="CenterAndExpand"
                IsRunning="True"
                VerticalOptions="CenterAndExpand"
                Color="Black" />
        </Grid>

    </RelativeLayout>

Вот скриншот:

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

person Cherry Bu - MSFT    schedule 03.01.2020