Xamarin.Android开发实践(一)
原文: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开发实践(一)相关推荐
- Xamarin.Android开发实践(十七)
Xamarin.Android开发实践(十七) 原文:Xamarin.Android开发实践(十七) Xamarin.Android之定位 一.前言 打开我们手中的应用,可以发现越来越多的应用使用了定 ...
- Xamarin.Android开发实践(十四)
原文:Xamarin.Android开发实践(十四) Xamarin.Android之ListView和Adapter 一.前言 如今不管任何应用都能够看到列表的存在,而本章我们将学习如何使用Xama ...
- Xamarin.Android开发实践(十八)
Xamarin.Android之SlidingMenu 一.前言 有位网友在评论中希望能够出个在Xamarin.Android下实现SlidingMenu效果的随笔,刚好昨天在观看官网示例项目的时候也 ...
- Xamarin.Android开发实践(四)
Xamarin.Android下获取与解析JSON 一.新建项目 1.新建一个Android项目,并命名为为NetJsonList 2.右击引用,选择添加引用,引用System.Json.dll 二. ...
- Xamarin Android开发实战(上册)
Xamarin Android开发实战(上册)大学霸内部资料 试读文档下载地址:http://pan.baidu.com/s/1jGEHhhO 密码:vcfm 介绍: 本教程是国内唯一的Xamarin ...
- Android开发实践:Java层与Jni层的数组传递
Android开发中,经常会在Java代码与Jni层之间传递数组(byte[]),一个典型的应用是Java层把需要发送给客户端的数据流传递到Jni层,由Jni层的Socket代码发送出去,当然,Jni ...
- xamarin Android 开发 文件“obj\Debug\android\bin\packaged_resources”不存在
严重性 代码 说明 项目 文件 行 禁止显示状态 错误 文件"obj\Debug\android\bin\packaged_resources"不存在. AndroidTest 各 ...
- android并发命令,Android开发实践:基于命令模式的异步任务线程
关于Android的异步操作,我在文章<Android开发实践:线程与异步任务>中介绍了两种方法,一种是采用线程,另一种是采用AsyncTask,今天再深入探讨下另一种模型:命令式的异步任 ...
- Xamarin.Android开发及常见问题的解决
一.Xamarin.Android开发环境的搭建 (一)所需组件 1.VS2013(VS2010以上即可) 2.JDK(http://www.oracle.com/technetwork/java/j ...
最新文章
- python大神的成长之路_Python大神成长之路: 第二次学习记录
- PHP多种序列化/反序列化的方法 (转载)
- 使用tcpdump,adb进行手机抓包
- python 发红包import random用redenv_python 常用模块之random,os,sys 模块
- 解决手机网站点击出现蓝色框的问题
- .net程序部署(setupFactory进阶)
- 外贸网站需要ERP系统吗?
- mysql学习笔记 51_MySQL学习笔记(一)
- 三、optimizer_trace分析
- 如何格式化搭载 Apple 芯片的 Mac?
- 中国制霸生成器「GitHub 热点速览 v.22.42」
- 嵌入式开发—C语言面试题
- Codecademy-网站编程开发学习网站
- CentOS7和Ubuntu18.10下运行Qt Creator出现cannot find -lGL的问题的解决方案
- FPGA实现JPEG-LS图像压缩,有损无损可配置,提供工程源码和技术支持
- matlab给程序加总标题,【转】matlab标题,给figure加标题,subplot的部分用法
- 《Sony Vegas Pro 12标准教程》——第1章 基础篇——基础知识 1.1 影视剪辑的概念...
- R语言在线地图神器:Leaflet for R包(二)基础底图
- The 2020 ICPC Asia Yinchuan Regional Programming Contest 银川 B. The Great Wall 题解
- 风雨二十年互联网中国之路
热门文章
- linux oracle11.2安装 ins-1010,ARCHLINUX下安装oracle11g
- assimp android build,使用Android Studio+CMakeLists编译assimp
- python是轻量级语言吗_python socket 轻量级服务器详解
- c语言socket段错误,(Qtcpsocket)退出程序时提示段错误的解决
- oracle+包锁源头,oracle琐碎笔记 - 石奈子0314
- 连通域最小外接矩形算法原理_算法|图论 2W字知识点整理(超全面)
- java 多态 转型
- Java proxy 子类代理
- sqlalchemy 查询
- MySQl Modify JSON Values