Xamarin 是由早期的Mono項目演變而來,原本是在Linux上執行C#程式的一個開放原始碼項目。後來陸續發表支援iOS的Mono Touch framework以及Mono For Android Framework。是以它在市場上并不是一個新的産品。2011年,原本在Novell的Mono項目團隊獨立成立一家公司,正式将名稱改為Xamarin。
透過 C#親和且功能齊全的語言特性,搭配.NET Framework 的 Base Class Library(BCL)的便利性,讓開發人員能以最高的生産力開發行動裝置應用程式。目前 Mono 支援 C# 5.0 的語言規範,開發人員可以用Lambda Expression、LINQ 甚至是 Async/Await 的異步處理。
Xamarin Studio是一個用C#語言開發跨平台應用的內建開發環境,它和iOS以及Android SDK緊密整合。
Xamarin還提供了for vs2010 vs2012的插件,這個是比較吸引人的地方。該插件可以很好地與微軟的生态系統內建,可以在Mac OS機器的仿真器上進行遠端調試和測試。在Mac OS上,因為iOS的現有限制,面向iOS的C#代碼會通過AOT編譯技術直接編譯為ARM彙編代碼。而在Android上,應用程式會轉換為IL,啟動時再進行JIT編譯。
安裝好Xamarin插件後,就可以自已熟悉的C#的語言開發Androd應用了,注冊使用者後就可免費學習、試用了,試用期滿後,可重新注冊使用者繼續學習試用。
Android應用程式的行為與互動更像是一組相關聯的子應用程式,而不是一個嚴格意義上的單一實體。由多個核心元件關聯而成,根據需要調用和執行個體化這些元件,這些元件之間獨立工作,分四類元件:
活動
服務
内容提供器
廣播接收器
1)活動,用來完成單個任務的使用者界面元件。指定啟動活動:MainLauncher
=true
活動:擁有兩個基本操作:視圖集合、活動類
活動三種狀态:
活動:當活動下在裝置上運作且位于螢幕前台時
暫停:當另一活動覆寫了目前活動時,此時沒有螢幕焦點,但仍在運作
停止:視窗被隐藏了,進行銷毀的最佳目标,以釋放資源
當狀态變化時,通過事件作出适當的響應,有:OnCreate()、OnStart()、OnRestart()、OnResume()、OnPause()、OnStop()及OnDestroy
如:
OnCreate():定義初始化活動,可通過基類Activity的SetContentView()方法來定義第一個視圖,可選擇各種資源,為控件配置設定事件處理程式的委托等
OnPause():當離開時,可關閉系統資源。
Button、ImageView、TextView繼承于View類,layout是視圖組
2)服務,可以運作的工作單元,沒有可視化元件。如:郵件應用程式、周期進行更新等
3)内容提供器,如:MediaStore:裝置上的媒體通路、Settings設定,CallLog提供電話打入打出等資訊。
ContentResolver:對象處理與内容提供器的互動,充當資料存儲的媒體。
ContentProvider:定義了可在實作的提供器上執行的所有可能操作。
4)廣播接收器,用于監聽事件并作出響應的應用程式元件。與服務相似處,無任何使用者界面元件。回調方法OnReceive()
Android清單,建立一個互相獨立但又互相合作的應用程式了.
布局控件:LinearLayout: 對齊,水準或垂直、RelativeLayout相對、TableLayout:相當于表格,TablesRows
案例1-1:LinearLayout
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button
android:id="@+id/MyButton"
android:layout_height="wrap_content"
android:text="@string/Hello"
/>
<Spinner
android:id ="@+id/widget27"
android:layout_width ="wrap_content"
android:layout_height ="wrap_content"
>
</Spinner>
</LinearLayout>
Orientation可改為水位方向:horizontal,此時調整前面的寬度為android:layout_width="200px"
主要代碼為:
publicclassActivity1
:Activity
{
int
count = 1;
protectedoverridevoid
OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.Main);//初始化一個資源包
Button
button = FindViewById<Button>(Resource.Id.MyButton);//擷取一個按鈕
button.Click +=
delegate { button.Text =string.Format("{0}
clicks!", count++); };//添加一個事件
}
}
Activity是Android程式設計的核心,OnCreate函數是初始化一個資源包(Main),從該視圖中擷取一個按鈕,并為其添加一個事件。
案例1-2:TableLayout
<TableLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:id ="@+id/widget1"
android:layout_width="wrap_content"
></Spinner>
<TableRow
<EditText
android:id
="@+id/widget29"
android:layout_width="wrap_content"
android:text
="你好呵"
android:textSize
="18sp"
/>
android:text="TableLayoutBut"
</TableRow>
</TableLayout>