我使用AbsoluteLayout处理Xamarin.Forms,但是,我不确定如何处理元素的位置。
我正在使用比例值,所以如果我在AbsoluteLayout.LayoutBounds="1, 0.05, 0.15, 0.1"
放置一个元素,其中每个值都是按比例的(因此标记是"所有" {{1} })
它将位于屏幕的顶部/右侧。然而,它不会占据一席之地。那意味着什么呢?如果它们到外面,每个元素都会重新定位到屏幕中?
但是现在,当你放置一个元素时,另一个问题是基于X / Y位置?是中心还是其他方面?
在这个例子中,我尝试使用0.15,但渲染有点奇怪,所以我把0和渲染匹配与我想要的一样。
你可以说"测试它,你会看到。"然而,设计师和我浪费时间来定位每个元素,因为我们&#39 ;不确定理解它是如何工作的。因此,我们可以尝试使用debuging ..
我们也在搜索是否存在一个软件来生成有关设计师设计的位置。我们指的是元素的位置X / Y百分比。
提前感谢!
答案 0 :(得分:18)
使用AbsoluteLayoutFlag.All,Rectangle bounds参数具有以下含义:
宽度和高度是人们通常所期望的。然而,x和y不是因为人们更习惯于“左”和“顶”。因此,您可以编写转换器将左百分比转换为x,将百分比转换为y:
x =左/(1 - 宽度)
y =顶部/(1 - 高度)
答案 1 :(得分:7)
AbsoluteLayout
当我研究X
时,我创建了这个示例和
测试它,你会看到
我从调查中得出的结论是:
Y
和View
是1.0, 1.0
左上角的坐标。它的相对位置。正如您所看到的,红色矩形2.0
是中心位置,因此,据我所知,屏幕的100%宽度为AbsoluteLayout
(高度相同)。 AbsoluteLayout
中的所有观看次数均取决于父X
的值。
编辑:
Y
和View
是Width
的中心坐标,而不是左上角。 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,宽度,高度)应解释如下:
AbsoluteLayout
总体尺寸的一部分。例如,宽度为0.1的孩子将创建布局的10%,宽度为0.9的孩子将覆盖90%,而从左到右的父对象将填充1.0。考虑 x / y 位置的一种好方法是将其与窗口滚动条或值滑块控件进行比较,因为整个滚动条在一直以来都可以认为它是在0(顶部文档)和1(底部文档)之间滑动。
不用说,通过将 x 或 y 设置为0.5来完成对孩子的居中操作,而无需考虑 width 或 height < / em>值。