【问题标题】:Xamarin Forms Absolute Layout instead of Relative LayoutXamarin 形成绝对布局而不是相对布局
【发布时间】:2018-01-22 18:01:06
【问题描述】:

由于 Jason Smith 不推荐 Relative 布局并说我们应该使用 Absolute 布局,我有一个问题,我们如何处理 RelativeToView 概念?

AbsoluteLayout 设置元素在自身内部相对于自身的比例坐标和大小,而不是作为RelativeLayout。如果我需要一些元素相互关联怎么办?创建额外的网格和 StackLayouts?我宁愿使用RelativeLayout,否则我错过了一些东西。

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

使用绝对布局,我可以定义顶部按钮的位置,并说它的高度是屏幕的 10%。现在我可以通过说它从屏幕的 11% 开始来移动底部按钮。但这会改变我的顶部按钮高度。如果我希望我的顶部按钮是自然的“自动”大小,我不能这样做。那么,如果我不知道顶部按钮在屏幕上占据了多少,我怎么能把底部按钮放在顶部按钮下面呢?我知道如何使用相对布局,但我如何使用绝对布局来做到这一点?

看起来解决方案是嵌套一堆布局https://developer.xamarin.com/guides/xamarin-forms/user-interface/layouts/absolute-layout/ 这是唯一的方法吗?那性能还是比相对布局好吗?

【问题讨论】:

    标签: xamarin xamarin.forms


    【解决方案1】:

    就其本质而言,RelativeLayout 功能强大,并提供了其他 Layout 本身所没有的布局选项。但这种能力是以性能为代价的。始终如一地解决约束依赖关系并获得最终布局并不便宜。

    重点不一定是永远不应该使用RelativeLayout,而是很多时候其他布局可以完成这项工作,是的,即使是 2-3 个嵌套布局也可以比单个等效的 RelativePanel 性能更高。

    Grid 特别是一个强大的选项,通过巧妙地使用 Auto、Star 和/或绝对大小的行和列,加上 RowSpan 和 ColumnSpan,加上元素边距等,可以实现类似的效果。

    考虑您的具体示例,我不知道用AbsoluteLayout 实现您想要的方法,至少不增加附加属性的复杂性。但这似乎很适合GridRowSpan="Auto" 在第一行。仅从图表中,我无法确切说明您要进行哪些其他限制。

    【讨论】:

    • 好的,假设第一行是自动的。底部按钮从顶部按钮中间开始的第二行怎么办?如何构建列跨度?
    • 我匆匆忙忙,找不到使用列跨度的方法(底部按钮与顶部按钮的中心左对齐)。但就此而言,我看不到使用多个嵌套布局执行此操作的方法。你可以吗?它似乎非常特定于 RelativeLayout。
    • 理论上可以计算按钮的一半宽度,然后计算屏幕宽度的百分比,但值得吗?并且可能必须在代码中完成,而不是 xml
    • 见上,之前的评论忘记加你了
    • '值得'取决于用例。如果只是几个按钮,使用RelativeLayout,没什么大不了的。如果您有很多子视图,并且它位于 UI 的性能关键部分(例如 ListView 的模板),并且测试已经确定了一个真正的性能问题,那么您可能需要考虑使用代码隐藏来代替 RelativeLayout。
    猜你喜欢
    • 2017-01-03
    • 1970-01-01
    • 2017-02-02
    • 2020-01-21
    • 1970-01-01
    • 2017-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多