Xamarin.Android快速入门
2014-07-09 09:04 y-z-f 阅读(30369) 评论(27) 编辑 收藏 举报一、准备工作
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),当然速度跟你的真机一样。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?