天天看點

第二章:解剖一個應用程式(2)

由于該解決方案包含兩到六個項目中的任何一個,是以在選擇運作或調試應用程式時,必須指定啟動哪個程式。

在Visual Studio的解決方案資料總管中,右鍵單擊五個應用程式項目中的任意一個,然後從菜單中選擇Set As StartUp Project項目。 然後,您可以選擇部署到仿真器或實際裝置。 要建構和運作程式,請選擇菜單項Debug> Start Debugging。

在Xamarin Studio的解決方案清單中,單擊出現在所選項目右側的小工具圖示,然後從菜單中選擇設為啟動項目。 然後你可以從主要的人中選擇Run> Start Debugging。

如果一切順利,模闆建立的骨架應用程式将運作,您将看到一條短消息:

第二章:解剖一個應用程式(2)

正如你所看到的,這些平台有不同的配色方案。 iOS和Windows 10 Mobile螢幕在淺色背景上顯示深色文字,而Android裝置在黑色背景上顯示淺色文字。 預設情況下,Windows 8.1和Windows Phone 8.1平台就像Android一樣在黑色背景上顯示淺色文字。

預設情況下,所有平台都已啟用方向更改。 翻轉手機,你會看到文字調整到新的中心。

該應用程式不僅在裝置或模拟器上運作,而且還可以部署。 它與手機或模拟器上的其他應用程式一起出現,并可以從那裡運作。 如果您不喜歡應用程式圖示或應用程式名稱顯示方式,則可以在各個平台項目中進行更改。

顯然,由Xamarin.Forms模闆建立的程式非常簡單,是以這是一個很好的機會來檢查生成的代碼檔案,并找出它們之間的互相關系以及它們是如何工作的。

讓我們從負責繪制您在螢幕上看到的文本的代碼開始。 這是Hello項目中的App類。 在由Visual Studio建立的項目中,App類是在App.cs檔案中定義的,但在Xamarin Studio中,該檔案是Hello.cs。 如果項目模闆自本章編寫以來沒有太多變化,可能看起來像這樣:

第二章:解剖一個應用程式(2)
第二章:解剖一個應用程式(2)

請注意,名稱空間與項目名稱相同。這個App類被定義為public,并從Xamarin.Forms應用程式類派生。構造函數真的隻有一個責任:将Application類的MainPage屬性設定為Page類型的對象。

Xamarin.Forms模闆在這裡生成的代碼顯示了一個非常簡單的方法來定義此構造函數:ContentPage類派生自Page,在單頁Xamarin.Forms應用程式中非常常見。 (在本書中你會看到許多ContentPage)。除了Android螢幕頂部的狀态欄,Android螢幕底部的按鈕和狀态欄外,它占據了手機螢幕的大部分在Windows Phone螢幕的頂部。 (如你所見,iOS狀态欄實際上是單頁應用程式中ContentPage的一部分。)

ContentPage類定義了一個名為Content的屬性,您可以将其設定為頁面的内容。一般來說,這個内容是一個布局,而這個布局又包含了一堆視圖,在這種情況下,它被設定為一個StackLayout,這個StackLayout把它的孩子排列在一個堆棧中。

這個StackLayout隻有一個孩子,這是一個标簽。 Label類派生自View,用于Xamarin.Forms應用程式顯示一段文本。本章後面将更詳細地讨論VerticalOptions和HorizontalTextAlignment屬性。

對于您自己的單頁Xamarin.Forms應用程式,您通常會定義從ContentPage派生的自己的類。 App類的構造函數然後将您定義的類的執行個體設定為其MainPage屬性。 你會看到這是如何工作很快。

在Hello解決方案中,您還将看到一個用于建立PCL的AssemblyInfo.cs檔案和一個包含程式所需的NuGet包的packages.config檔案。 在“解決方案”清單中的“Hello”下面的“參考”部分中,至少會看到PCL需要的四個庫。

正如你正在編寫一個Xamarin.Forms應用程式,這個PCL項目将會收到你的大部分注意力。 在某些情況下,這個項目中的代碼可能需要針對各種平台進行一些裁剪,而且您很快會看到如何去做。 您還可以在五個應用程式項目中包含特定于平台的代碼。

五個應用程式項目都有自己的圖示和中繼資料形式的資産,如果您打算将應用程式推向市場,您必須特别注意這些資産。 但在您學習如何使用Xamarin.Forms開發應用程式的時候,通常可以忽略這些資産。 您可能會想要将這些應用程式項目折疊到解決方案清單中,因為您不需要對其内容進行太多打擾。

但是你真的應該知道這些應用程式項目是什麼,是以讓我們仔細看看。

在每個應用程式項目的References部分中,您将看到對常見PCL項目(本例中為Hello)的引用,以及各種.NET程式集,上面列出的Xamarin.Forms集合以及适用于其他Xamarin.Forms集合 每個平台。

這些庫中的每一個都在Xamarin.Forms命名空間中定義了一個靜态Forms.Init方法,該方法初始化該特定平台的Xamarin.Forms系統。 每個平台的啟動代碼都必須調用這個方法。

您也剛剛看到PCL項目派生出一個名為App的公共類,它來自Application。 每個平台的啟動代碼也必須執行個體化這個App類。

如果您熟悉iOS,Android或Windows Phone開發,您可能會好奇地看到平台啟動代碼如何處理這些作業。

繼續閱讀