剑客
关注科技互联网

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

博客分类: 官方教程

原文链接: Hello, Android .

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

Hello, Android Quickstart

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

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

下面开始练习。

系统及环境要求

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

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

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

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

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

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

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

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

  1. 选中设计界面中的 Hello World,Click Me! 按钮,并按 Delete 键删除它。 在工具箱(左侧区域)的搜索框中输入 text ,然后拖动控件 Text(Large) 到设计界面(中间区域)中:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

using System.Text;
    using System;

    namespace Core
    {
        public static class PhonewordTranslator
        {
            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 文件。 重新生成解决方案,以保证没有编译错误。

  1. 接下来,我们添加代码与UI界面连接起来。 双击解决方案管理器中的 MainActivity.cs 文件,打开后在 MainActivity 类中添加后台代码:

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

  1. 首先配置 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 class MainActivity : Activity
        {
            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
            }
        }
    }
  2. 下一步,我们需要为 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);
  3. 首先,为 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;
        }
    };
  4. 其次,为 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();
    };
  5. 最后,我们需要给应用分配拨打电话的权限。我们可以通过Android Manifest来编辑应用的权限。双击解决方案管理器中 Phoneword 项目下的 Properties 项,然后选择 Android Manifest 打开界面:

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

Required Permissions 中,勾选 CALL_PHONE 权限

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

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

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

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

    namespace Phoneword
    {
        [Activity (Label = "Phone Word", MainLauncher = true)]
        public class MainActivity : Activity
        {
            ...
        }
    }
  2. 然后,设置应用的图标。首先从 Xamarin App Icons set 下载并解压,展开 Resources 下的 drawable 文件夹,并将现有的 Icon.png 删除(右键-删除):

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. 最后,我们可以通过将应用部署到模拟器上进行测试。在本文中,我们使用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

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

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

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

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

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

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

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

参考:

译: 奇葩史

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址