«

Xamarin.Android 入门开发

时间:2024-3-2 17:33     作者:韩俊     分类: Android


一,HelloWorld

这个阶段主要完成目标:Xamarin价格收费标准考察和分析。Xamarin.Android 部署安装。第一个Xamarin.Android工程HelloWorld,熟悉Android工程新建、运行、打包整个流程。第二个Xamarin.Android工程,一个手机拨号应用;完成对Xamarin.android 开发的基本了解。

阶段结论:Xamarin.android 支持Android基本开发。

注意事项:Xamarin.android 所打包比原生系统所打包 大3.02M

1.1 新建一个solution

1.2 运行工程

1.3 导出应用程序

1.3.1 选择工程

选中HelloWorld工程,在Tabbar栏,project–>Publish Android Application

1.3.2 填写签名证书

1.3.3 选择存放位置以及文件名,点击Create生成一个安装包

1.4 代码结构介绍

1.5 Xamarin Studio 介绍


二,手机拨号应用

2.1 整体界面效果

2.2 应用实现以及涉及知识点:

2.2.1 axml 界面布局使用

与Android 在eclipse中开发类似:允许使用界面布局选择器Toolbox将布局控件拖拽到页面上。也允许在Source中进行代码实现。

2.2.2 组件获取

Button mBtnCall = FindViewById<Button> (Resource.Id.CallButton);

2.2.3 添加事件

 mBtnCall.Click += (object sender, EventArgs e) =>{};

2.2.4 对话框

var callDialog = new AlertDialog.Builder(this);
callDialog.SetMessage("Call " + translatedNumber + "?");
callDialog.SetNeutralButton("Call", delegate {
  // do other thing
});
callDialog.SetNegativeButton("Cancel", delegate { });
// Show the alert dialog to the user and wait for response.
callDialog.Show();

2.2.5 页面跳转

var intent = new Intent(this, typeof(CallHistoryActivity));
intent.PutStringArrayListExtra("phone_numbers", phoneNumbers);
StartActivity(intent);

2.2.6 打印输出

Console.WriteLine ("Test Output Str");

2.2.7 新建类

右键工程,选择Add 可以新建以下类文件

三,附上主要代码类:

using System.Text;
using System;
namespace PhoneCallDemo
{
        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;
            }
        }
    }


using System;
using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
using System.Collections.Generic;
namespace PhoneCallDemo
{
    [Activity (Label = "PhoneCall", MainLauncher = true, Icon = "@drawable/icon")]
    public class MainActivity : Activity
    {
        static readonly List<string> phoneNumbers = new List<string>();
        protected override void OnCreate (Bundle bundle)
        {
            base.OnCreate (bundle);
            // Set our view from the "main" layout resource
            SetContentView (Resource.Layout.Main);
            // Get our button from the layout resource,
            // and attach an event to it
            EditText mEditPhoneNum = FindViewById<EditText> (Resource.Id.PhoneNumberText);
            Button mBtnCall = FindViewById<Button> (Resource.Id.CallButton);
            Button mBtnTrans = FindViewById<Button> (Resource.Id.TranslateButton);
            Button mBtnCallHistory = FindViewById<Button> (Resource.Id.callhistoryButton);

            mBtnCall.Enabled = false;
            mBtnCallHistory.Enabled = false;
            string translatedNumber = string.Empty;
            mBtnTrans.Click += (object sender, EventArgs e) => {
                translatedNumber = PhoneCallDemo.PhonewordTranslator.ToNumber(mEditPhoneNum.Text);
                if (String.IsNullOrWhiteSpace(translatedNumber))
                {
                    mBtnCall.Text="Call";
                    mBtnCall.Enabled = false;
                }else
                {
                    mBtnCall.Text = "Call " + translatedNumber;
                    mBtnCall.Enabled = true;
                }
            };
            mBtnCall.Click += (object sender, EventArgs e) => {
                var callDialog = new AlertDialog.Builder(this);
                callDialog.SetMessage("Call " + translatedNumber + "?");
                callDialog.SetNeutralButton("Call", delegate {
                    phoneNumbers.Add(translatedNumber);
                    mBtnCallHistory.Enabled = true;
                    // 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();
            };

            mBtnCallHistory.Click += (sender, e) =>
            {
                var intent = new Intent(this, typeof(CallHistoryActivity));
                intent.PutStringArrayListExtra("phone_numbers", phoneNumbers);
                StartActivity(intent);
            };

        }
    }
}


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Widget;
namespace PhoneCallDemo
{
    [Activity (Label = "CallHistoryActivity")]            
    public class CallHistoryActivity : ListActivity
    {
        protected override void OnCreate (Bundle bundle)
        {
            base.OnCreate (bundle);
            // Create your application here
            var phoneNumbers = Intent.Extras.GetStringArrayList("phone_numbers") ?? new string[0];
            this.ListAdapter = new ArrayAdapter<string>(this, Android.Resource.Layout.SimpleListItem1, phoneNumbers);
        }
    }
}


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/PhoneNumberText"
        android:hint="TEL:123456" />
    <Button
        android:id="@+id/TranslateButton"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/text_translate" />
    <Button
        android:text="Call"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/CallButton" />
    <Button
        android:text="@string/CallHistory"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/callhistoryButton" />
</LinearLayout>



下一个阶段:Xamarin.IOS 部署开发

标签: android

热门推荐