返回索引目录

原文链接:Hello, Android_Quickstart.

译文链接:Xamarin.Android开发入门——Hello,Android快速上手

本部分介绍利用Xamarin开发Android应用程序

Hello, Android Quickstart

在指南的第一部分,我们创建一个打电话的应用,基础功能为:将输入含有字母和数字的电话号码转化为纯数字号码,然后拨打此号码。最终界面如下:

下面开始练习。

系统及环境要求

Xamarin.Android需要以下任一环境

  • 系统:OS X Yosemite及以上;最新版Xamarin Studio
  • 系统:Windows 7及以上;最新版Xamarin Studio
  • 系统:Windows 7及以上;Visual Studio专业版或更高版本

本教程假定您已安装最新版Xamarin.Android。Xamarin.Android安装教程:原文:Xamarin.Android Installation。开始前,请先下载并解压开发所需的资源文件:Xamarin App Icons & Launch Screens下载

模拟器配置

如果你使用Google的Android SDK模拟器,建议配置硬件加速。关于硬件加速配置的内容见:原文:Accelerating Android Emulators with HAXM

如果你使用Visual Studio的Android模拟器,则Hyper-V必须启用。关于Visual Studio Android 模拟器配置见:英:System Requirements for the Visual Studio Emulator for Android.中:Visual Studio Emulator for Android 系统要求

操作演练

1.启动Visual Studio

2.点击开始界面里的 开始-新建项目 来创建项目

3.在 新建项目 对话框中,点击 C#-Android ,然后选择Blank App(Android) 模板。将项目命名为 Phoneword 。点击 确定 创建新项目

4.项目创建成功后,在解决方案管理器中展开 Resources 文件夹里的 layout 文件夹。双击Main.axml 文件打开Android界面设计器,如下图所示:

5.选中设计界面中的Hello World,Click Me!按钮,并按Delete键删除它。

在工具箱(左侧区域)的搜索框中输入text,然后拖动控件 Text(Large) 到设计界面(中间区域)中:

注:新版模板里已没有按钮,可略过删除

6.选中 Text(Large) 控件,然后在属性面板中修改text属性值为Enter a Phoneword,如图所示:

7.下一步,在工具箱中拖动一个 Plain Text 控件到设计界面中,将它放置在 Text(Large) 控件下面。

注:可以通过搜索框帮助我们快速定位到具体的控件。

8.选中 Plain Text 控件,在属性面板中修改id属性值为@+id/PhoneNumberText,同时修改text属性值为1-855-XAMARIN

9.在工具箱中拖动一个 Button 到设计界面,并将其放置在 Plain Text 控件下面:

10.选中 Button ,在属性面板中修改id属性值为@+id/TranslateButton,同时修改text属性值为Translate

11.下一步,再从工具箱中拖动第二个 Button 到设计界面,并将其放置于 Translate 按钮下面:

12.选中新添加的 Button 控件,在属性面板中修改id属性值为@+id/CallButton,并将text属性值改为Call

按下CTRL+S键保存上述操作。

13.现在,我们添加转换电话号码的代码(从数字字母组合的号码到纯数字号码)。首先,我们添加一个新的文件:在解决方案管理器中,右击 Phoneword 项目,然后选择 添加—新建项...

14.在 添加新项 对话框中,选择 Visual C# > Code 中的 Code File ,并将其命名为PhoneTranslator.cs

注:最新中文版开发环境中,添加新项 下结构中,可以选择 Visual C#-代码 里的 代码文件,也可以选择 Visual C#-Android 里的 Class。—— 都是建立.cs文件

15.移除掉模板代码,并用以下代码替换:

新版模板文件本身就是个空文件

  1. using System.Text;
  2. using System;
  3. namespace Core
  4. {
  5. public static class PhonewordTranslator
  6. {
  7. public static string ToNumber(string raw)
  8. {
  9. if (string.IsNullOrWhiteSpace(raw))
  10. return "";
  11. else
  12. raw = raw.ToUpperInvariant();
  13. var newNumber = new StringBuilder();
  14. foreach (var c in raw)
  15. {
  16. if (" -0123456789".Contains(c))
  17. newNumber.Append(c);
  18. else {
  19. var result = TranslateToNumber(c);
  20. if (result != null)
  21. newNumber.Append(result);
  22. }
  23. // otherwise we've skipped a non-numeric char
  24. }
  25. return newNumber.ToString();
  26. }
  27. static bool Contains (this string keyString, char c)
  28. {
  29. return keyString.IndexOf(c) >= 0;
  30. }
  31. static int? TranslateToNumber(char c)
  32. {
  33. if ("ABC".Contains(c))
  34. return 2;
  35. else if ("DEF".Contains(c))
  36. return 3;
  37. else if ("GHI".Contains(c))
  38. return 4;
  39. else if ("JKL".Contains(c))
  40. return 5;
  41. else if ("MNO".Contains(c))
  42. return 6;
  43. else if ("PQRS".Contains(c))
  44. return 7;
  45. else if ("TUV".Contains(c))
  46. return 8;
  47. else if ("WXYZ".Contains(c))
  48. return 9;
  49. return null;
  50. }
  51. }
  52. }

然后点击 文件-保存 (或按CTRL+S键)来保存PhoneTranslator.cs文件。

重新生成解决方案,以保证没有编译错误。

16.接下来,我们添加代码与UI界面连接起来。

双击解决方案管理器中的MainActivity.cs文件,打开后在MainActivity类中添加后台代码:

17.首先配置 Translate 按钮。在MainActivity类中找到OnCreate方法。我们将会在OnCreate方法中的base.OnCreate(bundle)SetContentView(Resource.Layout.Main)之后添加代码。移除模板按钮处理代码(没有就不用管),最后代码类似于下面示例:

  1. using System;
  2. using Android.App;
  3. using Android.Content;
  4. using Android.Runtime;
  5. using Android.Views;
  6. using Android.Widget;
  7. using Android.OS;
  8. namespace Phoneword
  9. {
  10. [Activity (Label = "Phoneword", MainLauncher = true)]
  11. public class MainActivity : Activity
  12. {
  13. protected override void OnCreate (Bundle bundle)
  14. {
  15. base.OnCreate (bundle);
  16. // Set our view from the "main" layout resource
  17. SetContentView (Resource.Layout.Main);
  18. // Our code will go here
  19. }
  20. }
  21. }

18.下一步,我们需要为 layout 文件中的控件(之前界面设计器中拖的控件)添加对应的引用。在OnCreate方法中添加如下代码:(添加在SetContentView之后)

  1. // Get our UI controls from the loaded layout:
  2. EditText phoneNumberText = FindViewById<EditText>(Resource.Id.PhoneNumberText);
  3. Button translateButton = FindViewById<Button>(Resource.Id.TranslateButton);
  4. Button callButton = FindViewById<Button>(Resource.Id.CallButton);

19.首先,为 Translate 按钮添加点击事件处理。将如下代码添加至OnCreate方法中(在上一步的代码之后):

  1. // Disable the "Call" button
  2. callButton.Enabled = false;
  3. // Add code to translate number
  4. string translatedNumber = string.Empty;
  5. translateButton.Click += (object sender, EventArgs e) =>
  6. {
  7. // Translate user's alphanumeric phone number to numeric
  8. translatedNumber = Core.PhonewordTranslator.ToNumber(phoneNumberText.Text);
  9. if (String.IsNullOrWhiteSpace(translatedNumber))
  10. {
  11. callButton.Text = "Call";
  12. callButton.Enabled = false;
  13. }
  14. else
  15. {
  16. callButton.Text = "Call " + translatedNumber;
  17. callButton.Enabled = true;
  18. }
  19. };

20.其次,为 Call 按钮添加点击事件处理。在之前的 Translate 按钮事件代码之后添加如下代码:

  1. callButton.Click += (object sender, EventArgs e) =>
  2. {
  3. // On "Call" button click, try to dial phone number.
  4. var callDialog = new AlertDialog.Builder(this);
  5. callDialog.SetMessage("Call " + translatedNumber + "?");
  6. callDialog.SetNeutralButton("Call", delegate {
  7. // Create intent to dial phone
  8. var callIntent = new Intent(Intent.ActionCall);
  9. callIntent.SetData(Android.Net.Uri.Parse("tel:" + translatedNumber));
  10. StartActivity(callIntent);
  11. });
  12. callDialog.SetNegativeButton("Cancel", delegate { });
  13. // Show the alert dialog to the user and wait for response.
  14. callDialog.Show();
  15. };

21.最后,我们需要给应用分配拨打电话的权限。我们可以通过Android Manifest来编辑应用的权限。双击解决方案管理器中 Phoneword 项目下的 Properties 项,然后选择 Android Manifest 打开界面:

Required Permissions 中,勾选 CALL_PHONE 权限

22.点击 文件-全部保存 (或者按CTRL+SHIFT+S键)来保存所有操作,然后点击 生成-重新生成解决方案 (或者按CTRL+SHIFT+B键)来编译应用程序。当程序编译完成后,Visual Studio会在其左下角显示编译成功的消息:

如果有错误,请检查是否按照以上步骤操作,修正至可以生成成功。如果遇到生成错误,例如:Resource does not exist in the current context,请校验MainActivity.cs中的命名空间与项目名称(Phoneword)是否一致,然后重新生成解决方案。如果仍然有生成错误,请确认你已安装的最新版的Xamarin.Android的更新。

23.现在我们已经建立的可用的应用程序,接下来我们完善应用程序的内容。首先,编辑MainActivityLabel值。此Label值显示在Android系统的页面顶部,表示用户正在使用哪个应用程序。在MainActivity类的顶部,将Label值修改为Phone Word,如下所示:

  1. namespace Phoneword
  2. {
  3. [Activity (Label = "Phone Word", MainLauncher = true)]
  4. public class MainActivity : Activity
  5. {
  6. ...
  7. }
  8. }

24.然后,设置应用的图标。首先从 Xamarin App Icons set 下载并解压,展开 Resources 下的 drawable 文件夹,并将现有的Icon.png删除(右键-删除):

在以下弹出确认框中点击 OK :

25.然后,右击 drawable 文件夹,选择 添加-现有项...

26.在文件选择对话框中,浏览解压后的Xamarin App Icons目录,打开 drawable 文件夹,选择Icon.png并点击 添加

27.下一步,添加Xamarin App Icons中剩余的 drawable-* 的文件夹到项目中。那些文件夹为不同设备,不同分辨率提供不同的图标以便更好的显示。打开文件浏览窗口,定位到Xamarin App Icons的解压目录,然后选中 drawable-* 目录。

拖动这些文件夹至Visual Studio的 解决方案管理器 面板中的 Resources 文件夹上。至此,可以在右侧 解决方案管理器 中可以看到项目已经包含那些文件夹:

28.接下来,在Android Manifest界面中的 Application Icon 下拉框中选择@drawable/Icon作为应用的图标:

29.最后,我们可以通过将应用部署到模拟器上进行测试。在本文中,我们使用Android AVD Manager配置的虚拟设备(名称为 Nexus 5(KitKat) )——关于如何配置见:原文:Android SDK Emulator。同样,你也可以使用预置配置下拉框中的任意一个。

在将应用部署到模拟器之前,我们先配置下应用所支持的最低Android版本,以此保证可以在我们选择的虚拟设备上运行。在Visual Studio中,双击 Properties 打开 Application 页面。在 Minimun Android to target 配置中,选择匹配你虚拟设备的API Level。在本文示例中,我们选择API Level 19,所以应用将运行在 Nexus 5(KitKat) 虚拟设备上。(更多关于Android API Levels的信息见:原文:Understanding Android API Levels

30.下一步,点击工具栏中下拉菜单将应用部署到 Nexus 5(KitKat) ,如下图所示:

Visual Studio会在安装和启动应用之前将文档拷贝到模拟器。

31.下图展示了Phoneword应用在Android SDK模拟器上的运行效果。点击 Translate 按钮会更新 Call 按钮的text值,然后点击 Call 按钮会调用一个拨打电话确认框,如下面右图所示:

至此,第一个Xamarin.Android应用程序创建完成。下面将对此进行深入介绍理解:原文:Hello, Android Deep Dive译文:Hello, Android深入理解


参考:


译:奇葩史

[译]:Xamarin.Android开发入门——Hello,Android快速上手的更多相关文章

  1. [译]:Xamarin.Android开发入门——Hello,Android Multiscreen深入理解

    原文链接:Hello, Android Multiscreen_DeepDive. 译文链接:Xamarin.Android开发入门--Hello,Android Multiscreen深入理解. 本 ...

  2. [译]:Xamarin.Android开发入门——Hello,Android深入理解

    返回索引目录 原文链接:Hello, Android_DeepDive. 译文链接:Xamarin.Android开发入门--Hello,Android深入理解 本部分介绍利用Xamarin开发And ...

  3. [译]:Xamarin.Android开发入门——Hello,Android Multiscreen快速上手

    原文链接:Hello, Android Multiscreen Quickstart. 译文链接:Hello,Android Multiscreen快速上手 本部分介绍利用Xamarin.Androi ...

  4. [Android开发学iOS系列] 快速上手UIKit

    快速上手iOS UIKit UIKit是苹果官方的framework, 其中包含了各种UI组件, window和view, 事件处理, 交互, 动画, 资源管理等基础设施支持. 按照前面的介绍, 用U ...

  5. Android开发入门要点记录:四大组件

    cocos2dx跨平台开发中需要了解android开发,昨天快速的浏览了一本Android开发入门教程,因为之前也似懂非懂的写过Activity,Intent,XML文件,还有里面许多控件甚至编程思想 ...

  6. 教我徒弟Android开发入门(一)

    前言: 这个系列的教程是为我徒弟准备的,也适合还不懂java但是想学android开发的小白们~ 本系列是在Android Studio的环境下运行,默认大家的开发环境都是配置好了的 没有配置好的同学 ...

  7. Android开发入门经典【申明:来源于网络】

    Android开发入门经典[申明:来源于网络] 地址:http://wenku.baidu.com/view/6e7634050740be1e650e9a7b.html?re=view

  8. Android开发入门

    教我徒弟Android开发入门(一) 教我徒弟Android开发入门(二) 教我徒弟Android开发入门(三) 出处:http://www.cnblogs.com/kexing/tag/Androi ...

  9. Android开发周报:Android L默认加密用户数据

    Android开发周报:Android L默认加密用户数据 新闻 <iCloud前车之鉴,Android L默认开启加密功能>:iCloud 艳照风波再起,第二波女星照片流出,大量女星的裸 ...

随机推荐

  1. Visual SVN 5.01 Po jie 笔记

    最近搞项目要与几个同事一起coding,鉴于代码的合并和提交的问题,所以要搞个版本管理.由于是私有的项目,所以退git 求SVN了.装了乌龟和Visual SVN,才发现Visual SVN的客户端不 ...

  2. Sharp Memory LCD (ls013b7dh03)驱动

    网上找不到什么靠谱的资料,甚至我调好了夏普原厂和代理商还来找我要demo,  哎,苦逼的码农. lcd_main.c #include "ls013b7dh03.h" #inclu ...

  3. [Delphi] Delphi版本号对照

    VER300    Delphi Seattle / C++Builder Seattle    23    230    (Delphi:Win32/Win64/OSX/iOS32/iOS64/An ...

  4. linux查看MySQL版本的四种方法

    1 在终端下执行 mysql -V 2 在help中查找 mysql --help |grep Distrib 3 在mysql 里查看 select version() 4 在mysql 里查看 s ...

  5. Android常用组件之AutoCompleteTextView

    安卓组件中,凡是需要配置数据的组件,一般都是用Adapter配置. AutoCompleteTextView的使用方法与ListView类似,也是用setAdapter来设置数据. MultiAuto ...

  6. [转]Oracle10g数据库自动诊断监视工具(ADDM)使用指南

    第一章 ADDM简介                 在Oracle9i及之前,DBA们已经拥有了很多很好用的性能分析工具,比如,tkprof.sql_trace.statspack.set even ...

  7. Eclipse常用快捷键汇总

    经常使用eclipse进行开发,不掌握快捷键步行啊,在此整理了一些快捷键,大家要灵活运用啊... (注:红色标出来的是经常使用到的快捷键,磨刀不误砍柴工啊...) Ctrl+1 快速修复(最经典的快捷 ...

  8. 分布式session的实现

    一.分布式Session的几种实现方式 1.基于数据库的Session共享 2.基于NFS共享文件系统3.基于memcached 的session,如何保证 memcached 本身的高可用性?4. ...

  9. Fedora下依赖库的解决

    转载于http://blog.sina.com.cn/s/blog_6f74890d0101dpp4.html x86_64版本的fedora中打开共享对象文件失败的解决小技巧———以qq for l ...

  10. ObjC运行时部分概念解析(一)

    转型iOS已经许久了,Runtime(运行时)还没有好好了解过.之前没有阅读过源码,紧紧凭借自己的臆测.现在阅读下源码,做一些笔记.方便再次翻阅 SEL SEL是一个关键字,如果没有涉及runtime ...