2017-08-14 136 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 –