原文:Xamarin.Android开发实践(一)

一、准备工作

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,然后在其中写入如下代码(这些代码的重要功能是将字符串转换成正确格式的电话号码):

namespace Phoneword_Droid
{public static class PhoneTranslator{public static string ToNumber(string raw){if (string.IsNullOrWhiteSpace(raw))return "";elseraw = 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文件:

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),当然速度跟你的真机一样。

Xamarin.Android开发实践(一)相关推荐

  1. Xamarin.Android开发实践(十七)

    Xamarin.Android开发实践(十七) 原文:Xamarin.Android开发实践(十七) Xamarin.Android之定位 一.前言 打开我们手中的应用,可以发现越来越多的应用使用了定 ...

  2. Xamarin.Android开发实践(十四)

    原文:Xamarin.Android开发实践(十四) Xamarin.Android之ListView和Adapter 一.前言 如今不管任何应用都能够看到列表的存在,而本章我们将学习如何使用Xama ...

  3. Xamarin.Android开发实践(十八)

    Xamarin.Android之SlidingMenu 一.前言 有位网友在评论中希望能够出个在Xamarin.Android下实现SlidingMenu效果的随笔,刚好昨天在观看官网示例项目的时候也 ...

  4. Xamarin.Android开发实践(四)

    Xamarin.Android下获取与解析JSON 一.新建项目 1.新建一个Android项目,并命名为为NetJsonList 2.右击引用,选择添加引用,引用System.Json.dll 二. ...

  5. Xamarin Android开发实战(上册)

    Xamarin Android开发实战(上册)大学霸内部资料 试读文档下载地址:http://pan.baidu.com/s/1jGEHhhO 密码:vcfm 介绍: 本教程是国内唯一的Xamarin ...

  6. Android开发实践:Java层与Jni层的数组传递

    Android开发中,经常会在Java代码与Jni层之间传递数组(byte[]),一个典型的应用是Java层把需要发送给客户端的数据流传递到Jni层,由Jni层的Socket代码发送出去,当然,Jni ...

  7. xamarin Android 开发 文件“obj\Debug\android\bin\packaged_resources”不存在

    严重性 代码 说明 项目 文件 行 禁止显示状态 错误 文件"obj\Debug\android\bin\packaged_resources"不存在. AndroidTest 各 ...

  8. android并发命令,Android开发实践:基于命令模式的异步任务线程

    关于Android的异步操作,我在文章<Android开发实践:线程与异步任务>中介绍了两种方法,一种是采用线程,另一种是采用AsyncTask,今天再深入探讨下另一种模型:命令式的异步任 ...

  9. Xamarin.Android开发及常见问题的解决

    一.Xamarin.Android开发环境的搭建 (一)所需组件 1.VS2013(VS2010以上即可) 2.JDK(http://www.oracle.com/technetwork/java/j ...

最新文章

  1. python大神的成长之路_Python大神成长之路: 第二次学习记录
  2. PHP多种序列化/反序列化的方法 (转载)
  3. 使用tcpdump,adb进行手机抓包
  4. python 发红包import random用redenv_python 常用模块之random,os,sys 模块
  5. 解决手机网站点击出现蓝色框的问题
  6. .net程序部署(setupFactory进阶)
  7. 外贸网站需要ERP系统吗?
  8. mysql学习笔记 51_MySQL学习笔记(一)
  9. 三、optimizer_trace分析
  10. 如何格式化搭载 Apple 芯片的 Mac?
  11. 中国制霸生成器「GitHub 热点速览 v.22.42」
  12. 嵌入式开发—C语言面试题
  13. Codecademy-网站编程开发学习网站
  14. CentOS7和Ubuntu18.10下运行Qt Creator出现cannot find -lGL的问题的解决方案
  15. FPGA实现JPEG-LS图像压缩,有损无损可配置,提供工程源码和技术支持
  16. matlab给程序加总标题,【转】matlab标题,给figure加标题,subplot的部分用法
  17. 《Sony Vegas Pro 12标准教程》——第1章 基础篇——基础知识 1.1 影视剪辑的概念...
  18. R语言在线地图神器:Leaflet for R包(二)基础底图
  19. The 2020 ICPC Asia Yinchuan Regional Programming Contest 银川 B. The Great Wall 题解
  20. 风雨二十年互联网中国之路

热门文章

  1. linux oracle11.2安装 ins-1010,ARCHLINUX下安装oracle11g
  2. assimp android build,使用Android Studio+CMakeLists编译assimp
  3. python是轻量级语言吗_python socket 轻量级服务器详解
  4. c语言socket段错误,(Qtcpsocket)退出程序时提示段错误的解决
  5. oracle+包锁源头,oracle琐碎笔记 - 石奈子0314
  6. 连通域最小外接矩形算法原理_算法|图论 2W字知识点整理(超全面)
  7. java 多态 转型
  8. Java proxy 子类代理
  9. sqlalchemy 查询
  10. MySQl Modify JSON Values