解决了:为什么Xamarin绝对布局堆叠不遵守子级顺序

时间:2019-04-23 10:48:08

标签: xamarin xamarin.android absolutelayout

我正在尝试实现一种布局,其中内容在背景上有图像(位于左下角,垂直扩展100%,水平扩展60%)

整个内容都包装在AbsoluteLayout中,然后,主要内容是该布局的子级,由StackLayout(以及内部的其他一些内容)组成。

Visual Studio(Visual Studio Community 2017)中的预览器正确显示了布局-图像在内容下方,内容按预期放置在中间。但是,VS Emulator和Genymotion都在内容上方显示图像。

我将代码中的代码剪裁得尽可能可读(将其样式化)

...              

        <Frame VerticalOptions="End" AbsoluteLayout.LayoutFlags="All" Margin="0" Padding="0" IsClippedToBounds="True" AbsoluteLayout.LayoutBounds="0,1,0.6,1">
            <Image Source="Graphic_Anna.png" />
        </Frame>

        <!-- Start: Actual Page Content -->
        <StackLayout VerticalOptions="Center" AbsoluteLayout.LayoutBounds="0,0,1,1" AbsoluteLayout.LayoutFlags="All" x:Name="ApplicationLayoutContentLevel">

            <Label Text="This is some text in main content" />

        </StackLayout>
        <!-- End: Actual Page Content -->

    </AbsoluteLayout>
</ContentPage.Content>

...

预期结果显示在此屏幕快照中(来自Previewer):https://i.imgur.com/C8GBMSi.png

但是,两个模拟器中的结果似乎都可以做到这一点:https://i.imgur.com/NvJFZan.png

很遗憾,目前我无法选择在实际的Android手机上测试该应用程序

1 个答案:

答案 0 :(得分:0)

是否要实现以下屏幕截图? 我不知道您使用的是什么尺寸,所以我从屏幕截图中删除了图片。

enter image description here

如果是这样,那是我的代码。如果要实现覆盖效果,我使用了两个stacklayout,第一个布局将被第二个布局覆盖。注意:如果设置了VerticalOptions将影响AbsoluteLayout.LayoutBounds

 <ContentPage.Content>
    <AbsoluteLayout>


        <StackLayout VerticalOptions="End" AbsoluteLayout.LayoutFlags="All" Margin="0" Padding="0" IsClippedToBounds="True" AbsoluteLayout.LayoutBounds="0,1,0.6,1">

            <Image Source="Graphic_Anna.png" />

        </StackLayout>
        <!-- Start: Actual Page Content -->
        <StackLayout AbsoluteLayout.LayoutFlags="All" AbsoluteLayout.LayoutBounds="0.8,0.7,0.5,0.5"  x:Name="ApplicationLayoutContentLevel">
            <Image Source="start.png"  Scale="0.7"/>
            <Label Text="10/10" TextColor="Black" FontSize="50" Margin="20,10,0,0"/>
            <Label Text="Great job! you got everything" TextColor="Black" Margin="0,10,0,0" />
            <Label Text="Back to games" TextColor="red"  Margin="25,20,0,0"  />
        </StackLayout>
    <!-- End: Actual Page Content -->

    </AbsoluteLayout>

</ContentPage.Content>