Xamarin表格 - AbsoluteLayout - 作品如何定位

时间:2016-06-22 10:09:08

标签: xamarin.forms absolutelayout

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

我正在使用比例值,所以如果我在AbsoluteLayout.LayoutBounds="1, 0.05, 0.15, 0.1"放置一个元素,其中每个值都是按比例的(因此标记是"所有" {{1} })

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

enter image description here

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

enter image description here

在这个例子中,我尝试使用0.15,但渲染有点奇怪,所以我把0和渲染匹配与我想要的一样。

你可以说"测试它,你会看到。"然而,设计师和我浪费时间来定位每个元素,因为我们&#39 ;不确定理解它是如何工作的。因此,我们可以尝试使用debuging ..

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

提前感谢!

6 个答案:

答案 0 :(得分:18)

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

  • x表示应留在控件左侧的剩余空间百分比(即父宽度 - 控制宽度)
  • y表示应留在控件顶部的剩余空间百分比(即父高 - 控制高度)
  • width是控件的宽度,以父宽度的百分比计算
  • height是控件的高度,以父高度的百分比计算

宽度和高度是人们通常所期望的。然而,x和y不是因为人们更习惯于“左”和“顶”。因此,您可以编写转换器将左百分比转换为x,将百分比转换为y:

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

答案 1 :(得分:7)

AbsoluteLayout

enter image description here

当我研究X时,我创建了这个示例和

  

测试它,你会看到

我从调查中得出的结论是: YView1.0, 1.0左上角的坐标。它的相对位置。正如您所看到的,红色矩形2.0是中心位置,因此,据我所知,屏幕的100%宽度为AbsoluteLayout(高度相同)。 AbsoluteLayout中的所有观看次数均取决于父X的值。

编辑:

YViewWidth的中心坐标,而不是左上角。 1.0的100%是git status

答案 2 :(得分:1)

X&& Y是元素的中心

答案 3 :(得分:0)

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

示例

在X = 0.1时,给定宽度为20%。长度的90%将在右侧,而10%将在左侧。

在X = 0.5时,给定宽度为20%。 10%将留在左侧,而10%将留在右侧。

X边界公式

矩形变量(Ax,Ay,Wx,Wy)

W-所需宽度

Ax-X值。 (锚位置)

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

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

公式具有5种可能的锚定值方案

斧头= 0:

X1 = 0&X2 = Wx

斧头= 1:

X2 = 1&X1 =(1-Wx)

斧头= 0.5

X1 = Ax-(0.5)(Wx)

X2 = Ax +(0.5)(Wx)

0 <斧<0.5

X1 = Ax-(Ax)(Wx)

X2 = Ax +(1-Ax)(Wx)

0.5 <斧<1

X1 = Ax-(Ax)(Wx)

X2 = Ax +(1-Ax)(Wx)

答案 4 :(得分:0)

作为一个较晚的答案,我在nuget包中放了一个AbsoluteLayout分支,但按预期工作。

安装nuget软件包SmartMachines.AbsoluteLayout,添加名称空间xmlns:sm="clr-namespace:SmartMachines;assembly=AbsoluteLayout",您将拥有与本地Xamarin完全相同的AbsoluteLayout,但具有预期的比例对齐行为。

希望可以在谷歌搜索和调试上为其他人节省几个小时。

答案 5 :(得分:0)

对于AbsoluteLayout.LayoutFlags="All"LayoutBounds x,y,宽度,高度)应解释如下:

  • width height 只是代表孩子的各个尺寸,占AbsoluteLayout总体尺寸的一部分。例如,宽度为0.1的孩子将创建布局的10%,宽度为0.9的孩子将覆盖90%,而从左到右的父对象将填充1.0。
  • x y 表示父级中的位置,相对于可能的极端移动(子级在布局中仍完全可见)。因此:x值0.0会将子项的左边缘与布局容器的左边缘相对,而值1.0则将子项的右边缘与容器的右边缘对齐。 0到1之间的值表示这些极端之间的位置,当孩子完全处于布局中时,它将在孩子可用的运动范围内按比例移动。

考虑 x / y 位置的一种好方法是将其与窗口滚动条或值滑块控件进行比较,因为整个滚动条在一直以来都可以认为它是在0(顶部文档)和1(底部文档)之间滑动。

不用说,通过将 x y 设置为0.5来完成对孩子的居中操作,而无需考虑 width height < / em>值。