首页 > 解决方案 > 为什么 AbsoluteLayout.LayoutBounds 在 Xamarin 中工作不正确?

问题描述

我不明白为什么屏幕结束前有这么多空间(附照片,平台 - Android)。看起来 AbsoluteLayout 并没有填充屏幕的所有空间,但事实并非如此。“白色”按钮之间的空间也在哪里(一个按钮应该占据屏幕的 20%;首先从屏幕左边缘的 4% 后开始,第二 - 在 28% 之后:28% - 4% -20% = 4% 按钮之间的可用空间)????

这是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="PokerCalculator.OutsCalculator"
         BackgroundColor="#131313">
<AbsoluteLayout BackgroundColor="HotPink">
    <Label Text="Number of outs:"
           FontSize="Medium"
           AbsoluteLayout.LayoutBounds="0.04,0,0.3,0.18"
           AbsoluteLayout.LayoutFlags="SizeProportional, PositionProportional"  
           BackgroundColor="Aqua"/>
    <Label x:Name="lblOutNumber"
           Text="15"
           AbsoluteLayout.LayoutBounds="0.35,0,0.18,0.18"
           AbsoluteLayout.LayoutFlags="SizeProportional, PositionProportional"
           BackgroundColor="Azure"/>
    <Button x:Name="btnBack"
            Text="BACK"
            Clicked="btnBack_Clicked"
            AbsoluteLayout.LayoutBounds="0.7,0,0.28,0.18"
            AbsoluteLayout.LayoutFlags="SizeProportional, PositionProportional"
            BackgroundColor="Fuchsia"/>

    <Button BackgroundColor="White" 
                AbsoluteLayout.LayoutBounds="0.04,0.2,0.20,0.28"
                AbsoluteLayout.LayoutFlags="All"/>
    <Button BackgroundColor="White"
                AbsoluteLayout.LayoutBounds="0.28,0.2,0.20,0.28"
                AbsoluteLayout.LayoutFlags="All"/>
    <Button BackgroundColor="White"
                AbsoluteLayout.LayoutBounds="0.52,0.2,0.20,0.28"
                AbsoluteLayout.LayoutFlags="All"/>
    <Button BackgroundColor="White"
                AbsoluteLayout.LayoutBounds="0.76,0.2,0.20,0.28"
                AbsoluteLayout.LayoutFlags="All"/>

</AbsoluteLayout>
</ContentPage>

照片

照片(样机)

标签: xamarinxamarin.formsxamarin.android

解决方案


正如这里论坛所讨论的

绝对布局比例不能按您的预期工作/计算。你的意图可以通过使用来实现relativelayout

假设您设置 X = 0.5 和 Width = 0.5。

根据您的意图,您可能期望元素的 X 从中心开始并填充 absolutelayout 边界的右后半部分?不。

答案是该元素将是布局边界的 50% 宽度并位于中心。使X位置例如(0.5 * absolutelayoutWidth) - (0.5 * elementWidth)(我猜公式是这样的?)

我建议使用relativelayout


推荐阅读