【Xamarin.Forms】プログレスバーを表示するメモ

スマホユーザーならおなじみのこちら、プログレスバー

今回はこれを Xamarin.Forms 上で表示していきます。

MessagingCenterでプラットフォーム別に処理を書く

今回行いたい処理は各プラットフォームごとに異なる為、共通コードからMessagingCenterを使って呼び出します。

まずはAndroidの実装です。

// MainActivity.cs
            AlertDialog dialog = null;
            MessagingCenter.Subscribe<App, bool>(this, "dialog_progress", (app, b) =>
            {
                if (dialog != null)
                {
                    dialog.Dismiss();
                    dialog = null;
                }
                if (b) { 
                    var p = new Android.Widget.ProgressBar(this);
                    p.SetPadding(0, 50, 0, 50);

                    dialog = new AlertDialog.Builder(this)
                    .SetTitle("処理中...")
                    .SetView(p)
                    .SetCancelable(false)
                    .Show();
                }
            });

Androidでダイアログの生成には AlertDialog を使います。

え、プログレスバーを表示したいんだから ProgressDialog を使えばいいじゃん?と思った方もいると思います。

残念ながら ProgressDialog はAPI Level 26で非推奨になってしまったのです。。。

悲しみの舞

よって自分で作ったほうがいいわけです。

この例では AlertDialog のView に Widget.ProgressBar を追加して表示させています。

また、そのままだと上下に隙間がなくなってしまうのでp.SetPadding(0, 50, 0, 50) 上下に空間を開けています。

SetCancelable(false) を追加することにより、画面(ダイアログの外側)
をタップしても画面が閉じないようにしています。

共通コードから呼び出す

では実装ができたところで共通コードから呼び出します。

呼び出しはとても簡単で

MessagingCenter.Send(App, "dialog_progress",true); // 表示
MessagingCenter.Send(App, "dialog_progress",false); // 非表示

と書くだけです。簡単ですね!


ここまで読んでくれてありがとうございました!!

ホームページでは他にも

・様々な記事や作った作品および過程
・ソースコード、素材ファイル
・あらゆる”モノ”の作り方

などなど随時、記事や作品を新規公開・更新していますので是非見ていってくださいね!見ていただけると本当に嬉しいです!