天天看點

Xamarin.Android快速入門

一、準備工作

1.建立一個空的解決方案,并命名為Phoneword

Xamarin.Android快速入門
2.右擊解決方案 建立-》建立項目 并命名為Phoneword_Droid
Xamarin.Android快速入門

二、界面

1.打開Resources檔案夾-》layout檔案夾輕按兩下打開Main.axml

Xamarin.Android快速入門
2.然後将會出現下面的界面
Xamarin.Android快速入門
3.接着我們選擇這個Button并删除(按下Delete),并從左邊的工具箱中拖拽一個 Text(Large) 控件到該界面中,如下所示:
Xamarin.Android快速入門
4.同時還要通過屬性視窗修改Text的值:
Xamarin.Android快速入門
5.緊接着拖拽一個Plain Text控件到之前的Text控件下方,并修改Text屬性為1-855-XAMARIN。接着拖拽一個Button控件到Plain Text控件下方:
Xamarin.Android快速入門
同時修改Button控件的id和text:
Xamarin.Android快速入門
6.接着再拖拽一個Button控件到TranslateButton控件下方,并設定該id屬性為@+id/CallButton以及Text為Call,最終效果如下:
Xamarin.Android快速入門

三、代碼

1.右擊該項目,添加-》建立項,選擇類,并設定類的名稱為PhoneTranslator,然後在其中寫入如下代碼(這些代碼的重要功能是将字元串轉換成正确格式的電話号碼):

Xamarin.Android快速入門

namespace Phoneword_Droid

{

    public static class PhoneTranslator

    {

        public static string ToNumber(string raw)

        {

            if (string.IsNullOrWhiteSpace(raw))

                return "";

            else

                raw = raw.ToUpperInvariant();

            var newNumber = new StringBuilder();

            foreach (var c in raw)

            {

                if (" -0123456789".Contains(c))

                    newNumber.Append(c);

                else

                {

                    var result = TranslateToNumber(c);

                    if (result != null)

                        newNumber.Append(result);

                }

            }

            return newNumber.ToString();

        }

        public static int? TranslateToNumber(char c)

            if ("ABC".Contains(c))

                return 2;

            else if ("DEF".Contains(c))

                return 3;

            else if ("GHI".Contains(c))

                return 4;

            else if ("JKL".Contains(c))

                return 5;

            else if ("MNO".Contains(c))

                return 6;

            else if ("PQRS".Contains(c))

                return 7;

            else if ("TUV".Contains(c))

                return 8;

            else if ("WXYZ".Contains(c))

                return 9;

            return null;

    }

}

然後我們打開MainActivity.cs檔案:

Xamarin.Android快速入門
2.然後我們首先要做的是通過FindViewById擷取這些控件,OnCreate中代碼如下所示(需要先成功生成一次,防止Resource.Id下沒有對應的控件id):
Xamarin.Android快速入門

base.OnCreate(bundle);

            SetContentView(Resource.Layout.Main);

            EditText phoneNumberText = FindViewById<EditText>(Resource.Id.PhoneNumberText);

            Button translateButton = FindViewById<Button>(Resource.Id.TranslateButton);

            Button callButton = FindViewById<Button>(Resource.Id.CallButton);

            callButton.Enabled = false;

3.然後我們需要給translateButton綁定監聽事件,判斷輸入的字元是否為有效的電話号碼,如果是則啟用CallButton否則不啟用,同時還修改CallButton的文字(在上面代碼後面追加):

 string translatedNumber = string.Empty;

            translateButton.Click += (object sender, EventArgs e) =>

                translatedNumber = PhoneTranslator.ToNumber(phoneNumberText.Text);

                if (String.IsNullOrWhiteSpace(translatedNumber))

                    callButton.Text = "Call";

                    callButton.Enabled = false;

                    callButton.Text = "Call" + translatedNumber;

                    callButton.Enabled = true;

            };

4.最後我們需要綁定callButton的監聽事件,以便能夠在使用者點選後彈出對話框确認使用者是否需要撥打,并撥打電話(依然是接着上面的追加):

callButton.Click += (s, e) =>

                //對話框

                var callDialog = new AlertDialog.Builder(this);

                //對話框内容

                callDialog.SetMessage("Call" + translatedNumber + "?");

                //撥打按鈕

                callDialog.SetNeutralButton("Call", delegate

                    //使用意圖撥打電話

                    var callIntent = new Intent(Intent.ActionCall);

                    //将需要撥打的電話設定為意圖的參數

                    callIntent.SetData(Android.Net.Uri.Parse("tel:" + translatedNumber));

                    StartActivity(callIntent);

                });

                //取消按鈕

                callDialog.SetNegativeButton("Cancel", delegate { });

                //顯示對話框

                callDialog.Show();

四、運作

還需要添加對應的權限

Xamarin.Android快速入門
Xamarin.Android快速入門

筆者這裡采用的是x86下的模拟機,并不是ARM下,關于如何開啟x86下的模拟機需要的人可以留言(需要你的CPU支援VT-X),當然速度跟你的真機一樣。