首页 文章

Xamarin Forms - AbsoluteLayout - 工作位置如何

提问于
浏览
9

我正在使用AbsoluteLayout的Xamarin.Forms,但是,我不确定如何处理元素的位置 .

我在 AbsoluteLayout.LayoutBounds="1, 0.05, 0.15, 0.1" 放置一个元素,其中每个值都是比例(所以标志是"all" AbsoluteLayout.LayoutFlags="All"

它将放置在屏幕的顶部/右侧 . 然而,它不会占据一席之地 . 那意味着什么呢?如果外面的每个元素都重新定位到屏幕上?

enter image description here

但是现在,当你放置一个元素时,另一个问题是基于X / Y位置?是中心还是其他方面?

enter image description here

在这个例子中,我尝试使用0.15,但渲染有点奇怪,所以我把0然后渲染匹配我想要的 .

你可以说“测试它,你会看到 . ”然而,对于设计师和我来说,定位每个元素是浪费时间,因为我们不确定它是如何工作的 . 因此,我们努力尝试使用debuging ..

我们还在搜索是否存在一个软件来生成有关设计师设计的位置 . 我们指的是元素的位置X / Y百分比 .

预先感谢 !

5 回答

  • 0

    使用AbsoluteLayoutFlag.All,Rectangle bounds参数具有以下含义:

    • x表示应该在控件左侧的剩余空间百分比(即父宽度 - 控制宽度)

    • y表示应该在控件顶部的剩余空间(即父高 - 控制高度)的百分比

    • width是控件的宽度,以父宽度的百分比表示

    • height是控件的高度,以父高度的百分比表示

    宽度和高度是人们通常所期望的 . 然而,x和y不是因为人们更习惯于“左”和“顶” . 所以你可以编写一个转换器来将左边的百分比转换为x,将最高百分比转换成y:

    x =左/(1 - 宽度)
    y =上/(1 - 高)

  • 16
    <AbsoluteLayout BackgroundColor="Yellow">
    <BoxView
        Color="Red"
        AbsoluteLayout.LayoutBounds="1.0, 1.0, 0.5, 0.5"
        AbsoluteLayout.LayoutFlags="All" />
    
    <BoxView
        Color="Green"
        WidthRequest="50"
        HeightRequest="50"
        AbsoluteLayout.LayoutBounds="0.1, 0.1, AutoSize, AutoSize"
        AbsoluteLayout.LayoutFlags="PositionProportional" />
    
    <BoxView
        Color="Blue"
        AbsoluteLayout.LayoutBounds="0.25, 0.25, 0.5, 0.5"
        AbsoluteLayout.LayoutFlags="All" />
    </AbsoluteLayout>
    

    enter image description here

    当我研究 AbsoluteLayout 时,我创建了这个样本

    测试它,你会看到

    我从调查中得出的结论是: XYView 左上角的坐标 . 这是相对的立场 . 正如你所看到的红色矩形 1.0, 1.0 是中心位置,所以,据我所知,屏幕的100%宽度是 2.0 (高度相同) . AbsoluteLayout 内的所有视图都依赖于父 AbsoluteLayout 的值 .

    编辑:

    XYView 的中心坐标,不是左上角 . 并且 Width 的100%是 1.0 .

  • 1

    X && Y 是元素的中心

  • 0

    我做了一些测试,发现,使用AbsoluteLayoutFlag.All,基本上以百分比形式给出的X值基本上代表锚点在矩形上的位置 . 如果X = 10%那么锚点距离矩形的左边是10%:

    example

    在X = 0.1时,给定宽度为20% . 90%的长度将向右移动,10%将向左移动 .

    在X = 0.5时,给定宽度为20% . 10%将向左移动,10%将向右移动 .

    Formula for X bounds

    Variables in Rectangle (Ax, Ay, Wx, Wy)

    W - 所需宽度

    Ax - X值 . (锚位)

    X1 - 左上角相对于左侧的X位置值(X = 0)

    X2 - 右上角相对于左侧的x位置值(X = 0)

    The Formula has 5 possible scenarios for an Anchor value

    Ax = 0:

    X1 = 0&X2 = Wx

    Ax = 1:

    X2 = 1&X1 =(1 - Wx)

    Ax = 0.5

    X1 = Ax - (0.5)(Wx)

    X2 = Ax(0.5)(Wx)

    0 < Ax < 0.5

    X1 = Ax - (Ax)(Wx)

    X2 = Ax(1 - Ax)(Wx)

    0.5 < Ax < 1

    X1 = Ax - (Ax)(Wx)

    X2 = Ax(1-Ax)(Wx)

  • 7

    作为一个迟到的答案,我已经把一个带有AbsoluteLayout分支的nuget包,但正如我所期望的那样工作 .

    安装nuget包 SmartMachines.AbsoluteLayout ,添加命名空间 xmlns:sm="clr-namespace:SmartMachines;assembly=AbsoluteLayout" ,你将拥有与原生Xamarin完全相同的AbsoluteLayout,但具有预期的比例对齐行为 .

    希望能在google搜索和调试中节省其他人几个小时 .

相关问题