一、准備工作
1.創建一個空的解決方案,並命名為Phoneword
2.右擊解決方案 新建-》新建項目 並命名為Phoneword_Droid
二、界面
1.打開Resources文件夾-》layout文件夾雙擊打開Main.axml
2.然后將會出現下面的界面
3.接着我們選擇這個Button並刪除(按下Delete),並從左邊的工具箱中拖拽一個 Text(Large) 控件到該界面中,如下所示:
4.同時還要通過屬性窗口修改Text的值:
5.緊接着拖拽一個Plain Text控件到之前的Text控件下方,並修改Text屬性為1-855-XAMARIN。接着拖拽一個Button控件到Plain Text控件下方:
同時修改Button控件的id和text:
6.接着再拖拽一個Button控件到TranslateButton控件下方,並設置該id屬性為@+id/CallButton以及Text為Call,最終效果如下:
三、代碼
1.右擊該項目,添加-》新建項,選擇類,並設置類的名稱為PhoneTranslator,然后在其中寫入如下代碼(這些代碼的重要功能是將字符串轉換成正確格式的電話號碼):

1 namespace Phoneword_Droid 2 { 3 public static class PhoneTranslator 4 { 5 public static string ToNumber(string raw) 6 { 7 if (string.IsNullOrWhiteSpace(raw)) 8 return ""; 9 else 10 raw = raw.ToUpperInvariant(); 11 12 var newNumber = new StringBuilder(); 13 foreach (var c in raw) 14 { 15 if (" -0123456789".Contains(c)) 16 newNumber.Append(c); 17 else 18 { 19 var result = TranslateToNumber(c); 20 if (result != null) 21 newNumber.Append(result); 22 } 23 } 24 return newNumber.ToString(); 25 } 26 27 public static int? TranslateToNumber(char c) 28 { 29 if ("ABC".Contains(c)) 30 return 2; 31 else if ("DEF".Contains(c)) 32 return 3; 33 else if ("GHI".Contains(c)) 34 return 4; 35 else if ("JKL".Contains(c)) 36 return 5; 37 else if ("MNO".Contains(c)) 38 return 6; 39 else if ("PQRS".Contains(c)) 40 return 7; 41 else if ("TUV".Contains(c)) 42 return 8; 43 else if ("WXYZ".Contains(c)) 44 return 9; 45 return null; 46 } 47 } 48 }
然后我們打開MainActivity.cs文件:
2.然后我們首先要做的是通過FindViewById獲取這些控件,OnCreate中代碼如下所示(需要先成功生成一次,防止Resource.Id下沒有對應的控件id):

1 base.OnCreate(bundle); 2 SetContentView(Resource.Layout.Main); 3 EditText phoneNumberText = FindViewById<EditText>(Resource.Id.PhoneNumberText); 4 Button translateButton = FindViewById<Button>(Resource.Id.TranslateButton); 5 Button callButton = FindViewById<Button>(Resource.Id.CallButton); 6 7 callButton.Enabled = false;
3.然后我們需要給translateButton綁定監聽事件,判斷輸入的字符是否為有效的電話號碼,如果是則啟用CallButton否則不啟用,同時還修改CallButton的文字(在上面代碼后面追加):

1 string translatedNumber = string.Empty; 2 translateButton.Click += (object sender, EventArgs e) => 3 { 4 translatedNumber = PhoneTranslator.ToNumber(phoneNumberText.Text); 5 if (String.IsNullOrWhiteSpace(translatedNumber)) 6 { 7 callButton.Text = "Call"; 8 callButton.Enabled = false; 9 } 10 else 11 { 12 callButton.Text = "Call" + translatedNumber; 13 callButton.Enabled = true; 14 } 15 };
4.最后我們需要綁定callButton的監聽事件,以便能夠在用戶點擊后彈出對話框確認用戶是否需要撥打,並撥打電話(依然是接着上面的追加):

1 callButton.Click += (s, e) => 2 { 3 //對話框 4 var callDialog = new AlertDialog.Builder(this); 5 6 //對話框內容 7 callDialog.SetMessage("Call" + translatedNumber + "?"); 8 9 //撥打按鈕 10 callDialog.SetNeutralButton("Call", delegate 11 { 12 //使用意圖撥打電話 13 var callIntent = new Intent(Intent.ActionCall); 14 15 //將需要撥打的電話設置為意圖的參數 16 callIntent.SetData(Android.Net.Uri.Parse("tel:" + translatedNumber)); 17 18 StartActivity(callIntent); 19 }); 20 21 //取消按鈕 22 callDialog.SetNegativeButton("Cancel", delegate { }); 23 24 //顯示對話框 25 callDialog.Show(); 26 };
四、運行
還需要添加對應的權限
筆者這里采用的是x86下的模擬機,並不是ARM下,關於如何開啟x86下的模擬機需要的人可以留言(需要你的CPU支持VT-X),當然速度跟你的真機一樣。