1. 程式人生 > >.NET跨平臺開發之Xamarin.Android介紹與生命周期【2】

.NET跨平臺開發之Xamarin.Android介紹與生命周期【2】

tin keyevent resource resources des 殺死 roi 1.0 解鎖

前言

不同於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】