2017-10-13 61 views
4

我最近和我的团队讨论了Xamarin.Form的布局,他们认为Xamarin.Forms.AbsoluteLayout很脆弱并且很难与(我个人认为它们非常方便,特别是对于比例布局,以及我记得阅读的所有东西,它们通常不是性能问题)。他们引用了this article,其中说避免使用AbsoluteLayouts - 但是这是一个Android特定的文章,它指的是Android.Widget.AbsoluteLayoutXamarin.Forms布局如何转换为平台特定的布局?

因此,让我想... Xamarin.Forms.Layout以某种方式转化为Android.Widget.AbsoluteLayout(我认为他们是完全不同的,因为Xamarin.Forms允许比例大小/位置)?如何确实 Xamarin.Forms将各种布局转换为平台特定的布局?

+1

https://github.com/xamarin/Xamarin.Forms – Jason

+0

非常感谢您的参考,我将尝试挖掘代码并发现答案。你会说明确地避免Xamarin.Forms.AbsoluteLayout? – jbyrd

+2

@jbyrd“Android.Views.View”的底线是基于Forms的VisualElementTracker直接调用带有x,y,width,height参数的本地View.Layout方法来控制控件放置。表单有自己的层次结构父级布局管理器来执行计算。我有一个客户端,通过本地转换为Android LayoutParams和iOS约束替换了整个Forms布局系统,它具有基于Fody的构建转换和运行时缓存系统,并且实现*几乎*原生布局速度,完全吸引了Forms的布局经理。 – SushiHangover

回答

3

Xamarin Forms中的布局与原生平台上的布局不同。 XF绝对布局是而不是只是Android AbsoluteLayout的包装。

XF中的布局与WPF和其他Microsoft平台中的布局类似。布局首先要求所有的孩子给它一个首选大小(测量)。然后它用它的逻辑来安排它的孩子。内置控件包装现有的本地控件(例如,将地图映射到iOS上的UITextBox和Android上的EditText)。

这就是说。我同意绝对布局通常不是支持多种屏幕尺寸的好方法。还有其他更灵活的布局可帮助您创建“通用”UI的一般方法。