我正在使用AbsoluteLayout的Xamarin.Forms,但是,我不确定如何处理元素的位置 .
我在 AbsoluteLayout.LayoutBounds="1, 0.05, 0.15, 0.1"
放置一个元素,其中每个值都是比例(所以标志是"all" AbsoluteLayout.LayoutFlags="All"
)
它将放置在屏幕的顶部/右侧 . 然而,它不会占据一席之地 . 那意味着什么呢?如果外面的每个元素都重新定位到屏幕上?
但是现在,当你放置一个元素时,另一个问题是基于X / Y位置?是中心还是其他方面?
在这个例子中,我尝试使用0.15,但渲染有点奇怪,所以我把0然后渲染匹配我想要的 .
你可以说“测试它,你会看到 . ”然而,对于设计师和我来说,定位每个元素是浪费时间,因为我们不确定它是如何工作的 . 因此,我们努力尝试使用debuging ..
我们还在搜索是否存在一个软件来生成有关设计师设计的位置 . 我们指的是元素的位置X / Y百分比 .
预先感谢 !
5 回答
使用AbsoluteLayoutFlag.All,Rectangle bounds参数具有以下含义:
x表示应该在控件左侧的剩余空间百分比(即父宽度 - 控制宽度)
y表示应该在控件顶部的剩余空间(即父高 - 控制高度)的百分比
width是控件的宽度,以父宽度的百分比表示
height是控件的高度,以父高度的百分比表示
宽度和高度是人们通常所期望的 . 然而,x和y不是因为人们更习惯于“左”和“顶” . 所以你可以编写一个转换器来将左边的百分比转换为x,将最高百分比转换成y:
x =左/(1 - 宽度)
y =上/(1 - 高)
当我研究
AbsoluteLayout
时,我创建了这个样本我从调查中得出的结论是:
X
和Y
是View
左上角的坐标 . 这是相对的立场 . 正如你所看到的红色矩形1.0, 1.0
是中心位置,所以,据我所知,屏幕的100%宽度是2.0
(高度相同) .AbsoluteLayout
内的所有视图都依赖于父AbsoluteLayout
的值 .编辑:
X
和Y
是View
的中心坐标,不是左上角 . 并且Width
的100%是1.0
.X
&&Y
是元素的中心我做了一些测试,发现,使用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)
作为一个迟到的答案,我已经把一个带有AbsoluteLayout分支的nuget包,但正如我所期望的那样工作 .
安装nuget包
SmartMachines.AbsoluteLayout
,添加命名空间xmlns:sm="clr-namespace:SmartMachines;assembly=AbsoluteLayout"
,你将拥有与原生Xamarin完全相同的AbsoluteLayout,但具有预期的比例对齐行为 .希望能在google搜索和调试中节省其他人几个小时 .