.NET跨平臺開發之Xamarin.Android介紹與生命周期【2】
前言
不同於IOS,Xamarin在Visual Studio中針對Android,可以很直接的去設計使用者界面,在本系列中,子浩會針對Android目錄結構以及基本控制項進行介紹,包括TextView,EditView,Toggle/Switch、Seekbar控制項,還有一些配置進行講解。
Android目錄結構
在Visual Studio建立Android應用程序後,在方案中可以看到一下目錄結構:
其中的文件,我們Yi Yi 進行講解。
Assets:放置在該文件夾中,將會一起被封裝到Android的封裝文檔中,構建動作設定為AndroidAsset。如下通過陳述式來存取Assets的資源。
var tv = new TextView (this); // Read the contents of our asset string content; using (StreamReader sr = new StreamReader (Assets.Open ("read_asset.txt"))) { content = sr.ReadToEnd (); } // Set TextView.Text to our asset content tv.Text = content; SetContentView (tv);
Assets.Open的第二個參數 是獲取內容的方式。
Resources: 包含了Drawable,Layout以及Values文件夾,那其他的文件是為了存放不同解析度的文件,Layout文件是存放使用者界面文檔,而Value文件夾則是可以存放不同的類型的Xml,例如styles.xml, colors.xml… 針對Resources底下的文件。
當你打開maincontent.axml,會看到這些XML描述:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior" tools:showIn="@layout/activity_main" android:minWidth="25px" android:minHeight="25px"> </RelativeLayout>
1.其中RelativeLayout是頁面框架,相當於Wpf中的stackPanel。
2.@id 告訴Android parser 為對象建立一個id,方面獲取。
3.@string/[名稱] 在String.xml中建立一個字符串資源,後續提供Resource類別存取。
那@string則對應到了Resources\Values\String.xml
<resources>
<string name="app_name">張子浩撥號系統</string>
<string name="action_settings">Settings</string>
<string name="translationHistory">Translation History</string>
<string name="ApplicationName">Phoneword</string>
<string name="hello">hello writer</string>
</resources>
那我們的mainContent文件則可以這麽寫。
<Button
android:text="@string/hello"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/yourbutton" />
雙擊返回操作
其實這個功能在Xamarin並不難,在activity裏面有方法OnKeyDown,我們只要重寫一下就ok了,然後通過webView重新加載到要返回的頁面即可,當然操作有些死板,但還是有著不錯的效果!
DateTime? lastBackKeyDownTime;
public override bool OnKeyDown([GeneratedEnum] Keycode keyCode, KeyEvent e)
{
if (keyCode == Keycode.Back && e.Action == KeyEventActions.Down)
{
if (!lastBackKeyDownTime.HasValue || DateTime.Now - lastBackKeyDownTime.Value > new TimeSpan(0,0,2))
{
Toast.MakeText(this.ApplicationContext,"再按一次退出程序",ToastLength.Short).Show();
lastBackKeyDownTime = DateTime.Now;
}
else
{
Finish();
}
return true;
}
return base.OnKeyDown(keyCode, e);
}
其效果如下:
生命周期:
該圖片來源於網絡
1.啟動Activity:系統會先調用onCreate方法,然後調用onStart方法,最後調用onResume,Activity進入運行狀態。
2.當前Activity被其他Activity覆蓋其上或被鎖屏:系統會調用onPause方法,暫停當前Activity的執行。
3.當前Activity由被覆蓋狀態回到前臺或解鎖屏:系統會調用onResume方法,再次進入運行狀態。
4.當前Activity轉到新的Activity界面或按Home鍵回到主屏,自身退居後臺:系統會先調用onPause方法,然後調用onStop方法,進入停滯狀態。
5.用戶後退回到此Activity:系統會先調用onRestart方法,然後調用onStart方法,最後調用onResume方法,再次進入運行狀態。
6.當前Activity處於被覆蓋狀態或者後臺不可見狀態,即第2步和第4步,系統內存不足,殺死當前Activity,而後用戶退回當前Activity:再次調用onCreate方法、onStart方法、onResume方法,進入運行狀態。
7.退出當前Activity時:系統先調用onPause方法,然後調用onStop方法,最後調用onDestory方法,結束當前Activity。
這其實並不難理解,如果不理解的話,你可以使用Log.Debug進行輸出,自己觀察下吧。
ok,就這樣~
.NET跨平臺開發之Xamarin.Android介紹與生命周期【2】