2017-08-14 109 views
2

由于杰森史密斯不推荐相对布局,并说我们应该使用绝对布局我有一个问题我们如何处理RelativeToView概念?Xamarin形式绝对布局而不是相对布局

绝对布局设置相对于其自身的元素的比例坐标和大小,而不是RelativeLayout。如果我需要某些元素相互关联,该怎么办?创建额外的网格和StackLayouts?我宁愿使用RelativeLayout,或者我错过了一些东西。

决定添加一个最简单的例子,并考虑我们只讨论相对和绝对布局,没有堆栈,没有网格。我有2个按钮,我想要如图所示放置它们

enter image description here 使用绝对布局,我可以定义顶部按钮的位置并说它的高度为屏幕的10%。现在我可以将底部按钮从屏幕的11%开始。但这会改变我的顶部按钮高度。如果我希望我的顶部按钮是自然的“自动”尺寸,我不能那样做。那么,如果我不知道屏幕上有多少顶部按钮,我怎样才能将底部按钮置于顶部按钮之下?我知道如何用Relative来做到这一点,但我怎样才能用绝对布局来做到这一点?

它看起来像解决方案是巢一堆布局https://developer.xamarin.com/guides/xamarin-forms/user-interface/layouts/absolute-layout/ 是唯一的方法?这种表现是否比相对布局好?

回答

1

其本质RelativeLayout功能强大,并提供布局选项,没有其他布局本身。但是这种能力在性能上是成本的。一致地解决约束依赖性并获得最终布局并不便宜。

关键不一定永远不应该使用RelativeLayout,而是通常其他Layouts可以完成这项工作,并且是的,甚至2-3层嵌套布局可以比单个等效的RelativePanel更高效。

特别Grid是与类似的效果可以通过使用精明自动,星来实现一个功能强大的选项,和/或绝对尺寸的行和列酌情加rowspan的和ColumnSpan,加元件边距等

考虑你的具体例子,我不知道如何用AbsoluteLayout实现你想要的东西,至少没有附加属性的附加复杂性。但它似乎是天生适合Grid与第一行RowSpan="Auto"。单从图表我不能确切地说出你要去做什么其他限制。

+0

好吧,让我们假设第一行是auto。底部按钮从顶部按钮中间开始的第二行有什么用处?我如何构建列跨度? –

+0

我有一个快速去,无法找到一个方法来做到这一点(底部按钮与顶部按钮的中心左对齐)与列跨度。但是对于这个问题,我看不到用多个嵌套布局来做到这一点的方法。你可以吗?它看起来非常RelativeLayout特定。 –

+0

从理论上讲,可以计算按钮的半宽度以及计算屏幕宽度的百分比,但是值得吗?并且可能必须在代码中完成,而不是xml –