Лучше сказать, что дети AbsoluteLayout
могут легко перекрывать друг друга. Точно так же, как StackLayout
позволяет складывать элементы управления внутри, вертикально или горизонтально, AbsoluteLayout
позволяет позиционировать элементы управления внутри, используя абсолютные или пропорциональные значения, поэтому, если два элемента управления имеют одинаковый набор абсолютного позиционирования, они будут перекрывать 100%.
Следовательно, вы хотите обернуть ваш StackLayout
и еще один StackLayout
, у которого ваш ActivityIndicator
внутри AbsoluteLayout
, используя пропорциональный размер, например:
<AbsoluteLayout>
<StackLayout
x:Name="mainLayout"
AbsoluteLayout.LayoutBounds="0,0,1,1"
AbsoluteLayout.LayoutFlags="All" >
<Label Text="Welcome to Xamarin.Forms!"
HorizontalOptions="Center"
VerticalOptions="CenterAndExpand" />
<Button Text="Do Something"
Clicked="DoSomethingBtn_Clicked" />
</StackLayout>
<StackLayout
x:Name="aiLayout"
IsVisible="False"
AbsoluteLayout.LayoutBounds="0,0,1,1"
AbsoluteLayout.LayoutFlags="All"
BackgroundColor="Gray" Opacity="0.5">
<ActivityIndicator
x:Name="ai"
IsRunning="False"
HorizontalOptions="CenterAndExpand"
VerticalOptions="CenterAndExpand"
Color="Black"/>
</StackLayout>
</AbsoluteLayout>
Выше приведены дваStackLayouts
для того, чтобы оба заняли полный размер родительского контейнера AbsoluteLayout, который предположительно является Page. StackLayout
с индикатором изначально скрыт. В коде страницы для приведенного выше примера я показываю второй StackLayout
, запускаю индикатор активности и показываю его в течение 2 секунд, а затем скрываю снова:
private async void DoSomethingBtn_Clicked(object sender, EventArgs e)
{
ai.IsRunning = true;
aiLayout.IsVisible = true;
await Task.Delay(2000);
aiLayout.IsVisible = false;
ai.IsRunning = false;
}
Вот как это выглядит:
![enter image description here](https://i.stack.imgur.com/O62k0.png)
И поскольку второй StackLayout
полностью покрывает первый, ни один из элементов управления в первом StackLayout
не активируется.
Может быть стоит просмотреть документы для AbsoluteLayout, чтобы понять AbsoluteLayout.LayoutBounds и AbsoluteLayout.LayoutFlags: https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/layouts/absolute-layout