设为首页 收藏本站
查看: 1055|回复: 0

[经验分享] [译]:Xamarin.Android开发入门

[复制链接]

尚未签到

发表于 2017-6-22 08:35:56 | 显示全部楼层 |阅读模式
  返回索引目录
  
原文链接: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.移除掉模板代码,并用以下代码替换:

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

  

using System.Text;  
using System;
  

  
namespace Core
  
{

  public static>  {
  public static string ToNumber(string raw)
  {
  if (string.IsNullOrWhiteSpace(raw))
  return "";
  else
  raw = 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);
  }
  // otherwise we've skipped a non-numeric char
  }
  return newNumber.ToString();
  }
  static bool Contains (this string keyString, char c)
  {
  return keyString.IndexOf(c) >= 0;
  }
  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;
  }
  }
  
}
  

  然后点击 文件-保存 (或按CTRL+S键)来保存PhoneTranslator.cs文件。
  
重新生成解决方案,以保证没有编译错误。
  16.接下来,我们添加代码与UI界面连接起来。
  
双击解决方案管理器中的MainActivity.cs文件,打开后在MainActivity类中添加后台代码:

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

using System;  
using Android.App;
  
using Android.Content;
  
using Android.Runtime;
  
using Android.Views;
  
using Android.Widget;
  
using Android.OS;
  

  
namespace Phoneword
  
{
  [Activity (Label = "Phoneword", MainLauncher = true)]

  public>  {
  protected override void OnCreate (Bundle bundle)
  {
  base.OnCreate (bundle);
  

  // Set our view from the "main" layout resource
  SetContentView (Resource.Layout.Main);
  

  // Our code will go here
  }
  }
  
}
  

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

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

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

// Disable the "Call" button  
callButton.Enabled = false;
  

  
// Add code to translate number
  
string translatedNumber = string.Empty;
  

  
translateButton.Click += (object sender, EventArgs e) =>
  
{
  // Translate user's alphanumeric phone number to numeric
  translatedNumber = Core.PhonewordTranslator.ToNumber(phoneNumberText.Text);
  if (String.IsNullOrWhiteSpace(translatedNumber))
  {
  callButton.Text = "Call";
  callButton.Enabled = false;
  }
  else
  {
  callButton.Text = "Call " + translatedNumber;
  callButton.Enabled = true;
  }
  
};
  

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

callButton.Click += (object sender, EventArgs e) =>  
{
  // On "Call" button click, try to dial phone number.
  var callDialog = new AlertDialog.Builder(this);
  callDialog.SetMessage("Call " + translatedNumber + "?");
  callDialog.SetNeutralButton("Call", delegate {
  // Create intent to dial phone
  var callIntent = new Intent(Intent.ActionCall);
  callIntent.SetData(Android.Net.Uri.Parse("tel:" + translatedNumber));
  StartActivity(callIntent);
  });
  callDialog.SetNegativeButton("Cancel", delegate { });
  

  // Show the alert dialog to the user and wait for response.
  callDialog.Show();
  
};
  

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

namespace Phoneword  
{
  [Activity (Label = "Phone Word", MainLauncher = true)]

  public>  {
  ...
  }
  
}
  

  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 App Icons & Launch Screens下载 —— 示例练习资源文件
  • Phoneword —— 官方示例
  译:奇葩史

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-386676-1-1.html 上篇帖子: html-Css 基础大全 下篇帖子: 深度卷积神经网络在目标检测中的进展
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表