[料理佳餚] Xamarin.Forms 一定要了解清楚的 HorizontalOptions 及 VerticalOptions

剛開始要學習 Xamarin.Forms 開發時,一定會想說實作一個簡單的互動程式看看,查了語法敲了一串 <Button WidthRequest="100" HeightRequest="100" Text="I'm Button" /> 放上去之後,哇!怎麼 Button 那麼大?

我相信多數人會遭遇跟我一樣問題「怎麼讓 Button 依照我想要的位置去擺放?」

決定 View 物件擺放位置最基本的兩個屬性就是 HorizontalOptionsVerticalOptions,這兩個屬性的型別是 LayoutOptions 是 struct,裡面定義了 8 個靜態欄位:

  • Start
  • StartAndExpand
  • Center
  • CenterAndExpand
  • End
  • EndAndExpand
  • Fill
  • FillAndExpand

這 8 個靜態欄位有什麼不同?底下我們來一個一個探究。

Fill、Start、Center、End

這四個是最基本的起手式,除非 View 物件本身有特別改變設定,不然通常預設值是 Fill,所以剛剛那一串 Button 的語法可以看成是:

<Button HorizontalOptions="Fill" VerticalOptions="Fill" WidthRequest="100" HeightRequest="100" Text="I'm Button" />

除了 Fill 之外其他三個:Start、Center、End,再搭配 HorizontalOptions 及 VerticalOptions 我們的 View 物件就會出現額外 6 種位置的組合。

HorizontalOptions="Start"、"Center"、"End"

VerticalOptions="Start"、"Center"、"End"

所以我們要放一個 100×100 的 Button 在螢幕的中間,我們可以這樣做。

<Button HorizontalOptions="Center" VerticalOptions="Center" WidthRequest="100" HeightRequest="100" Text="I'm Button" />

那其他四個在做什麼? StartAndExpand、CenterAndExpand、EndAndExpand、FillAndExpand

這四個通常會跟 Layout 搭配著使用,如果是認真要用 Xamarin.Forms 做一個 App 的話應該不會不用 Layout 來做 UI 佈局,我就加一個 StackLayout 來看看這四個值有何差別?

我們先看 Start、Center、End 在 StackLayout 中會有什麼影響? 我給了 6 個 Button,前面 3 個的 VerticalOptions 值分別給定 Start、Center、End,可以看到在 StackLayout 中不受影響,後面的 3 個 Button 把 HorizontalOptions 值給 Start、Center、End 也符合預期。

我們換把 VerticalOptions 值給定 StartAndExpand、CenterAndExpand、EndAndExpand、FillAndExpand,並且在這之中另外安插 VerticalOptions 值非 Expand 結尾的 Button,可以看到 StackLayout 把空間先分配給非 Expand 的 Button 之後,把剩餘的空間平均分配給 Expand 的 Button,下圖框起來的地方就能看出來這些 Button 所分配到的空間是相同的。

如果把 StackLayout 的 Orientation 換成水平的,我們就會得到平均分配水平排列的 Buttons。

參考資料

相關資源

C# 指南
ASP.NET 教學
ASP.NET MVC 指引
Azure SQL Database 教學
SQL Server 教學
Xamarin.Forms 教學