Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
8
Help us understand the problem. What is going on with this article?

More than 5 years have passed since last update.

@amay077

Xamarin Component Store を眺めてみる

Xamarin には Component Store というものがあって、Xamarin で利用できる部品をここから購入することができます。(FREE もあります)

こちらです

"1"

TAGS のところで対応プラットフォームを絞りこめます。
iOS は MonoTouch の歴史が長いだけあってなかなかの数のコンポーネントがありますが、Android, Windows に関してはまだこれから、という感じでしょうか。
iOS/Android 両対応のコンポーネントも1ページに収まる程度の数はあります。

試しにつかってみる

試しに

"2"

を使ってみます。

確か、Component Store は Xamarin Studio と連携してるとのことなので、そちらから使ってみましょう。

プロジェクトの作成

Android Application、名称は AlertCenterSample としました。

コンポーネントを (Nu)Get!

メニュー → プロジェクト → Edit Components… から。

"3"

こんな画面になりました。次に Open Conponent Store をクリック。

"4"

Xamarin Components が出ました。Webサイトと同じやつです
。この中から Alert Center をクリック。

"5"

なんか動画が真っ黒ですが。気にせず Add to App をクリック。

"6"

ソリューションエクスプローラの Components に Alert Center が追加されました。また Getting Started が表示されています。

これで部品が追加できたようです、簡単でした。ちなみにコレ、NuGet というものが使われているそうです。(私は VS2005 以前の人なので使った事がありません)

"7"

ここから、Getting Started に表示されている通りに実装して動かしてみます。

AndroidManifest に権限を追加する

最初、完全に見落としていましたが、AndroidManifest.xml に SYSTEM_ALERT_WINDOW 権限を追加してください、と書いてありました。
Xamarin Studio での AndroidManifest.xml 編集については、

をご参考に。

確かに、SYSTEM_ALERT_WINDOW もありますね。

"9"

この手順を飛ばすと、ボタンをクリックした瞬間にアプリが落ちます(経験者

コーディング

Getting Started のコードをコピペで。

MainActivity.cs
<省略>
using Xamarin.Controls;

namespace AlertCenterSample
{
    [Activity (Label = "AlertCenterSample", MainLauncher = true)]
    public class Activity1 : Activity
    {
        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
            Button button = FindViewById<Button>(Resource.Id.myButton);

            button.Click += delegate
            {
                AlertCenter.Default.Init (Application);

                AlertCenter.Default.PostMessage ("Knock knock!", "Who's there?", Resource.Drawable.Icon);
                AlertCenter.Default.PostMessage ("Interrupting cow.", "Interrupting cow who?",
                                                 Resource.Drawable.Icon, () => {
                    Console.WriteLine ("Moo!");
                });
            };
        }
    }
}

そういえば、コンポーネントを取得直後、なぜか Xamarin Studio さんがそれを認識してくれずエラーが出ていました(ビルドはできた)が、Xamarin Studio を再起動したらエラーは消えました。

"8"

動かす

ビルドして実行するだけです。

"10"

iOS/Android 両対応と言っても 'Write once' ではない(かも知れない)

Alert Center は、iOS/Android 両対応とされていますが、Getting Started の iOS と Android のコードをよく見るとわかりますが、異なっています。「Android は iOS に '似せて' いる」とも書かれています。
同じコードで iOS/Android 共に動く!という夢はやっぱり見ない方がいいです。クロスプラットフォームで開発する時は View の部分はプラットフォーム毎にプロジェクトを分けなければならないので、共有できるコードも少ないと思います。

他のコンポーネントも、UI に絡むものは Look&Feel が統一できるだけで、(コンポーネントを使った)実装はプラットフォーム毎に必要と考えた方が良いでしょう。

まとめ

Xamarin Studio に統合された Component Store はとても簡単に使うことができました。

試しに使った Alert Center の他にも、

などは、どこかで使えそうです。

また、Component Store でなくても、.NET framework の基本的なクラスのみで書かれた(POCO な)ライブラリであれば、Xamarin でも概ね使うことができます。
例えば、Amazon Web Services の .NET SDK

は、Xamarin.Mac で使うことができました。(Xamain.iOS/Android は未確認)

View 部分の共有は最初から想定しない思想なので、Model 部分を開発する際に使えるコンポーネントがさらに充実していくことに期待します。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
8
Help us understand the problem. What is going on with this article?