2016-03-23 16 views
5

私は、コンテンツ(ユーザ名、パスワード、ログインボタン)にStackLayoutを使ってログインページを持っています。ユーザーがログインボタンをクリックすると、既存のStackLayoutコンテンツの上に、ページの絶対的な中央に「ローディング」ブロックが設定されます。いくつかの厄介な理由のために、これは簡単ではありません。シンプルで共通しているように思えますが、これはどのように行われますか?Xamarin.Forms - ページ上に要素を絶対に配置する方法は?

答えて

11

右のタグ:AbsoluteLayoutを使用しました。


var loadingView = new StackLayout 
{ 
    Padding = 6, 
    Orientation = StackOrientation.Horizontal, 
    BackgroundColor = Color.Gray, 
    Children = 
    { 
     new ActivityIndicator 
     { 
      Color = Color.White, 
      IsRunning = true, 
      VerticalOptions = LayoutOptions.Center, 
      WidthRequest = 20, 
      HeightRequest = 20 
     }, 
     new Label 
     { 
      TextColor = Color.White, 
      Text = "Loading...", 
      VerticalOptions = LayoutOptions.Center 
     } 
    } 
}; 

var layout = new AbsoluteLayout 
{ 
    Padding = 0, 
    HorizontalOptions = LayoutOptions.FillAndExpand, 
    VerticalOptions = LayoutOptions.FillAndExpand, 
    Children = 
    { 
     { 
      new BoxView {Color = Color.Green}, 
      new Rectangle(0, 0, 1, 1), 
      AbsoluteLayoutFlags.All 
     }, 
     { 
      loadingView, 
      new Rectangle(0.5, 0.5, -1, -1), 
      AbsoluteLayoutFlags.PositionProportional 
     } 
    } 
}; 

またはXAML:

<?xml version="1.0" encoding="UTF-8"?> 
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="ArtiSO.LoadingPage"> 
    <ContentPage.Content> 
     <AbsoluteLayout Padding="0" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand"> 
      <BoxView Color="Lime" AbsoluteLayout.LayoutBounds="0, 0, 1, 1" AbsoluteLayout.LayoutFlags="All" /> 
      <StackLayout Padding="6" Orientation="Horizontal" BackgroundColor="Gray" AbsoluteLayout.LayoutBounds="0.5, 0.5, -1, -1" AbsoluteLayout.LayoutFlags="PositionProportional"> 
       <ActivityIndicator Color="White" IsRunning="true" VerticalOptions="Center" WidthRequest="20" HeightRequest="20" /> 
       <Label TextColor="White" Text="Loading..." VerticalOptions="Center" /> 
      </StackLayout> 
     </AbsoluteLayout> 
    </ContentPage.Content> 
</ContentPage> 

結果:

Preview

+0

最上層AbsoluteLayoutをせずにそれを行う方法はありますか? B/Cは今、私がそこで欲しい主なコンテンツに影響を与えます。たとえば、AbsoluteLayout内のメインコンテンツがStackLayoutの場合、VerticalOptionsとHorizo​​ntalOptionsをLayout.Centerに設定することで中心にすることはできません(これらのプロパティは影響を受けません;レイアウトの境界を設定する必要があります)スタックレイアウトを絶対レイアウトに追加するときのレイアウトフラグなど)。 – jbyrd

+0

私はあなたを正しく理解しているかどうかはわかりません。あなたがAbsoluteLayoutに子供を集中させたい場合、 "境界"と "フラグ"パラメータを提供することができます:https://gist.github.com/lassana/effb87970c54f2097c0f –

関連する問題