Visual StudioでXamarinのクイックスタートのアプリ(Phoneword)を作ってみました。


Visual StudioでXamarinのクイックスタートのアプリ(Phoneword)を作ってみました。
こちらのページのものです。

翻訳というわけではないのですが、なんとか英語を読みながらやってみました。

XamarinもC#も初心者なので、
言われるがままにやってみます。

アルファベットを数字の電話番号に変換して、電話するアプリを作ります。

まずは、新しいプロジェクト:Phonewordを作成

を開きます。

ツールボックスから、Text (Large)をPhonewordの下にドラッグドロップします。

textView1が追加されるので、Textプロパティを「Enter a Phoneword」に変更します。


textView1の下にPlain Textを追加し、idを「@+id/PhoneNumberText」、textを「1-855-XAMARIN」

idを「@+id/PhoneNumberText」と変更することで、
右上のプロパティの下が、editText1が、PhoneNumberTextになりますが、変更されない場合は、他のコントロールを一度クリックしてから、PhoneNumberTextを再度クリックすると表示が更新されます。

PhoneNumberTextの下にButtonを追加し、idを「@+id/TranslateButton 」、textを「Translate」にします。

TranslateButtonの下にButtonを追加し、idを「@+id/CallButton」、textを「Call」にします。

次に、「PhoneTranslator.cs」というファイルを追加します。


「PhoneTranslator.cs」に、以下のコードを書き込みます。

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;
}
}
}

ToUpperInvariantというのは、インバリアントカルチャを使用して大文字に変換する関数です。
invariantは不変のという意味なので、特定の言語や国・地域に依存しない特別なカルチャということだそうです。

数字はそのまま、アルファベットの場合、ABCは2、DEFは3、、、と言った感じで変換しています。

次は、MainActivity.csを以下のように書き換えます。

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

namespace Phoneword
{
[Activity(Label = “Phoneword”, MainLauncher = true, Icon = “@drawable/icon”)]
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);

// Get the UI controls from the loaded layout:
EditText phoneNumberText = FindViewById(Resource.Id.PhoneNumberText);
Button translateButton = FindViewById